Como procurar de directórios recursivamente utilizando o Visual c#

Traduções de Artigos Traduções de Artigos
Artigo: 303974 - Ver produtos para os quais este artigo se aplica.
Para obter uma versão do Microsoft Visual C++ .NET do presente artigo, consulte 307009.
Para obter uma versão do Microsoft Visual Basic .NET do presente artigo, consulte 306666.

Este artigo refere-se para o espaço de nomes de biblioteca de classes do Microsoft .NET Framework seguinte:
  • System. IO
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo mostra como recursivamente subdirectórios de procura de ficheiros de uma aplicação Windows Forms c#. A cadeia de procura é de molde a que pode procurar ficheiros que correspondem a um determinados critérios de carácter universal. Cada parte do código é explicado conforme necessário. Um trabalho exemplo de código também é fornecido no final deste artigo.

Directório a recursão é uma tarefa comum de e/s para programadores. FileSystemObject torna esta tarefa fácil para modelo COM (Component Object) aplicações. Agora, esta tarefa tornou ainda mais fácil no .NET. Semelhante a FileSystemObject, as classes no espaço de nomes System. IO fornecem uma forma orientada para objectos para aceder aos ficheiros e directórios.

Requisitos

  • Microsoft Visual c# 2005 ou Microsoft Visual c# .NET

Recursividade de directório

Residem as classes de manipulação de ficheiros e directórios no espaço de nomes System. IO . Antes de trabalhar com estas classes, deve importar o espaço de nomes seguinte no projecto:
using System.IO;
As classes de espaço de nomes System. IO fornecem muitas classes que permitem trabalhar com ficheiros e directórios. Estas classes incluem as classes de ficheiro, directório classes e classes de utilitário. Muitas destas classes contêm estática métodos que pode chamar sem ter de declarar uma variável desse tipo. Por exemplo, pode utilizar o objecto de directório para obter os subdirectórios de um determinado directório.

O código seguinte utiliza o método de GetDirectories estático do objecto de directório para devolver uma matriz de cadeias. Esta matriz contém nomes de caminho de directório para os subdirectórios do directório C, se for caso disso.
string[] directories = Directory.GetDirectories("C:\\");
O objecto de directório contém também um método chamado GetFiles permite-lhe obter uma matriz de cadeia de ficheiros que correspondam a um determinados critérios. O código de exemplo seguinte utiliza o objecto de ficheiro para obter todos os ficheiros no directório C terminar com uma extensão. dll:
string[] files = Directory.GetFiles("C:\\", "*.dll");
Os métodos GetDirectories e GetFiles do objecto de directório são tudo o que é necessário recursivamente procurar ficheiros que correspondem à cadeia de procura. O seguinte método é utilizado para efectuar a recursividade:
void DirSearch(string sDir) 
{
	try	
	{
	   foreach (string d in Directory.GetDirectories(sDir)) 
	   {
		foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
		{
		   lstFilesFound.Items.Add(f);
		}
		DirSearch(d);
	   }
	}
	catch (System.Exception excpt) 
	{
		Console.WriteLine(excpt.Message);
	}
}
O código precedente transmite uma cadeia, que contém o directório que pretende procurar, para DirSearch. Este valor de cadeia é o caminho completo do directório. Que Pode utilizar o GetDirectories para obter os subdirectórios do directório que é passada para o procedimento. Porque GetDirectories devolve uma matriz, pode utilizar um para/cada instrução para efectuar uma iteração em cada subdirectório. Para cada subdirectório, utilize o método de GetFiles para iterar através de ficheiros nesse directório. O valor de a caixa de texto no formulário é transmitida ao GetFiles. A caixa de texto contém a cadeia de procura que filtra os resultados que devolve GetFiles . Se quaisquer ficheiros corresponderem os critérios de procura, são adicionados a caixa de listagem. Para cada subdirectório que está localizado, chame novamente a DirSearch e a transmitem um subdirectório. Utilizando esta chamada recursiva, Pode procurar todos os subdirectórios de um directório raiz especificado.

Exemplo de código completa

  1. Inicie um novo projecto de aplicação do Visual c# Windows. Por predefinição, um formulário que é denominado Form1 é criado.
  2. No menu Ver , clique para apresentar Solution Explorer.
  3. No Solution Explorer, com o botão direito Form1e, em seguida, clique em Ver código.
  4. Na janela de código do Form1, realce e elimine todos os o código existente.
  5. Cole o seguinte código na janela de código do Form1.
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.IO;
    
    namespace RecursiveSearchCS
    {
        /// <summary>
        /// Summary description for Form1
        /// </summary>
        public class Form1 : System.Windows.Forms.Form
        {
            internal System.Windows.Forms.Button btnSearch;
            internal System.Windows.Forms.TextBox txtFile;
            internal System.Windows.Forms.Label lblFile;
            internal System.Windows.Forms.Label lblDirectory;
            internal System.Windows.Forms.ListBox lstFilesFound;
            internal System.Windows.Forms.ComboBox cboDirectory;
            /// <summary>
            /// Required designer variable
            /// </summary>
            private System.ComponentModel.Container components = null;
    
            public Form1()
            {
                // 
                // Required for Windows Form Designer support
                // 
                InitializeComponent();
    
                // 
                // TODO: Add any constructor code after InitializeComponent call.
                // 
            }
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
                if( disposing )
                {
                    if (components != null) 
                    {
                        components.Dispose();
                    }
                }
                base.Dispose( disposing );
            }
    
            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support: do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.btnSearch = new System.Windows.Forms.Button();
                this.txtFile = new System.Windows.Forms.TextBox();
                this.lblFile = new System.Windows.Forms.Label();
                this.lblDirectory = new System.Windows.Forms.Label();
                this.lstFilesFound = new System.Windows.Forms.ListBox();
                this.cboDirectory = new System.Windows.Forms.ComboBox();
                this.SuspendLayout();
                // 
                // btnSearch
                // 
                this.btnSearch.Location = new System.Drawing.Point(608, 248);
                this.btnSearch.Name = "btnSearch";
                this.btnSearch.TabIndex = 0;
                this.btnSearch.Text = "Search";
                this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
                // 
                // txtFile
                // 
                this.txtFile.Location = new System.Drawing.Point(8, 40);
                this.txtFile.Name = "txtFile";
                this.txtFile.Size = new System.Drawing.Size(120, 20);
                this.txtFile.TabIndex = 4;
                this.txtFile.Text = "*.dll";
                // 
                // lblFile
                // 
                this.lblFile.Location = new System.Drawing.Point(8, 16);
                this.lblFile.Name = "lblFile";
                this.lblFile.Size = new System.Drawing.Size(144, 16);
                this.lblFile.TabIndex = 5;
                this.lblFile.Text = "Search for files containing:";
                // 
                // lblDirectory
                // 
                this.lblDirectory.Location = new System.Drawing.Point(8, 96);
                this.lblDirectory.Name = "lblDirectory";
                this.lblDirectory.Size = new System.Drawing.Size(120, 23);
                this.lblDirectory.TabIndex = 3;
                this.lblDirectory.Text = "Look In:";
                // 
                // lstFilesFound
                // 
                this.lstFilesFound.Location = new System.Drawing.Point(152, 8);
                this.lstFilesFound.Name = "lstFilesFound";
                this.lstFilesFound.Size = new System.Drawing.Size(528, 225);
                this.lstFilesFound.TabIndex = 1;
                // 
                // cboDirectory
                // 
                this.cboDirectory.DropDownWidth = 112;
                this.cboDirectory.Location = new System.Drawing.Point(8, 128);
                this.cboDirectory.Name = "cboDirectory";
                this.cboDirectory.Size = new System.Drawing.Size(120, 21);
                this.cboDirectory.TabIndex = 2;
                this.cboDirectory.Text = "ComboBox1";
                // 
                // Form1
                // 
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(688, 277);
                this.Controls.AddRange(new System.Windows.Forms.Control[] {
    
                this.btnSearch,
                this.txtFile,
                this.lblFile,
                this.lblDirectory,
                this.lstFilesFound,
                this.cboDirectory});
    
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
    
            }
            #endregion
    
            /// <summary>
            /// The main entry point for the application
            /// </summary>
            [STAThread]
            static void Main() 
            {
                Application.Run(new Form1());
            }
    
            private void btnSearch_Click(object sender, System.EventArgs e)
            {
                lstFilesFound.Items.Clear();
                txtFile.Enabled = false;
                cboDirectory.Enabled = false;
                btnSearch.Text = "Searching...";
                this.Cursor = Cursors.WaitCursor;
                Application.DoEvents();
                DirSearch(cboDirectory.Text);
                btnSearch.Text = "Search";
                this.Cursor = Cursors.Default;
                txtFile.Enabled = true;
                cboDirectory.Enabled = true;
            }
    
            private void Form1_Load(object sender, System.EventArgs e)
            {
                cboDirectory.Items.Clear();
                foreach (string s in Directory.GetLogicalDrives())
                {
                    cboDirectory.Items.Add(s);
                }
                cboDirectory.Text = "C:\\";
            }
    
            void DirSearch(string sDir) 
            {
                try	
                {
                    foreach (string d in Directory.GetDirectories(sDir)) 
                    {
                        foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
                        {
                            lstFilesFound.Items.Add(f);
                        }
                        DirSearch(d);
                    }
                }
                catch (System.Exception excpt) 
                {
                    Console.WriteLine(excpt.Message);
                }
            }
        }
    }
    Nota Tem de alterar o código no Visual Studio 2005 e no Visual Studio 2008. Em versões do Visual Studio anteriores ao Visual Studio 2005, Visual c# adiciona um formulário ao projecto quando cria um projecto de Windows Forms. O formulário é denominado Form1. No Visual c# 2005 e em versões posteriores, os dois ficheiros que representam o formulário são denominados Form1. cs e Form1. Escrever código no ficheiro Form1. cs. O Windows Forms Designer escreve o código no ficheiro Form1.

    Para converter o código de exemplo para o Visual c# 2005 ou Visual c# 2008, crie uma nova aplicação de Visual c# Windows e, em seguida, siga estes passos:
    1. Copie o objecto de botão , o objecto de caixa de texto e outros objectos do Windows à classe Form1 parcial no ficheiro Form1.
    2. Adicione o conteúdo da secção método InitializeComponent no código acima para o método InitializeComponent no ficheiro Form1. Cole o conteúdo após o conteúdo actual do método InitializeComponent .
    3. Copie os seguintes métodos do código acima para a classe Form1 no ficheiro Form1:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Adicione uma utilização de System. IO; utilizando a instrução para o ficheiro Form1. cs.
    Para mais informações sobre o Windows Forms Designer, visite o seguinte Web site da Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
  6. Prima F5 para compilar e executar o exemplo programa.

Referências

Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
306777Como ler um ficheiro de texto através da utilização de System. IO e Visual c#

Propriedades

Artigo: 303974 - Última revisão: 30 de maio de 2013 - Revisão: 4.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Palavras-chave: 
kbhowtomaster kbio kbmt KB303974 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 303974

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com