Jak rekurzivně vyhledávání adresářů pomocí Visual C#

Překlady článku Překlady článku
ID článku: 303974 - Produkty, které se vztahují k tomuto článku.
Microsoft Visual C++ .NET verzi tohoto článku naleznete v tématu 307009.
Microsoft Visual Basic .NET verzi tohoto článku naleznete v tématu 306666.

Tento článek se týká následujícího oboru názvů knihovny tříd rozhraní.NET Framework společnosti Microsoft:
  • System.IO
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek ukazuje, jak rekurzivně podadresáře hledání souborů v aplikaci model Windows Forms v jazyce C#. A vyhledávací řetězec zadán tak, aby soubory můžete vyhledávat odpovídající některá kritéria zástupné. Každá část kódu je vysvětlena podle potřeby. Funkční Ukázka kódu je k dispozici také na konci článku.

Adresář rekurze je běžný úkol IO pro vývojáře. FileSystemObject usnadňuje tento úkol pro modelu COM (Component Object) aplikace. Tento úkol se stal nyní ještě snazší v .NET. Podobný FileSystemObjecttřídy v oboru názvů System.IO poskytují objektově orientovaný způsob přístupu k souborům a adresáře.

Požadavky

  • Microsoft Visual C# 2005 nebo Microsoft Visual C# .NET

Adresář rekurze

Manipulace s třídami souborů a adresářů jsou umístěny v oboru názvů System.IO . Než začnete pracovat s tyto třídy, měli byste importovat Následující obor názvů do projektu:
using System.IO;
Tříd v oboru názvů System.IO poskytují mnoho tříd, které umožňují pracovat se soubory a adresáře. Tyto třídy zahrnují soubor třídy, třídy directory a nástroj třídy. Mnohé z těchto tříd obsahovat statické metody, které lze volat bez nutnosti deklarovat proměnnou typu. Například, můžete použít objekt adresáře získat jeho podadresářů daném adresář.

Následující kód používá statickou metodu GetDirectories objektu adresáře vrátit pole řetězců. Toto pole obsahuje názvy adresářů cesty do podadresářů adresáře C, pokud existuje.
string[] directories = Directory.GetDirectories("C:\\");
Objekt adresáře také obsahuje metodu nazvanou GetFiles , která umožňuje načtení řetězců souborů, které odpovídají určitá kritéria. Následující příklad kódu používá objekt soubor načíst všechny soubory v adresáři C, které končí s příponou DLL:
string[] files = Directory.GetFiles("C:\\", "*.dll");
GetDirectories a GetFiles metody objektu adresáře jsou vše, co je třeba hledat rekurzivně soubory, Porovná vyhledávací řetězec. Následující metoda se používá k provedení rekurze:
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);
	}
}
Předchozí kód předává řetězec, který obsahuje adresář, Chcete-li hledat DirSearch. Hodnota tohoto řetězce je úplná cesta k adresáři. Je GetDirectories lze použít k načtení podadresářů adresáře, který je předán do procedury. Protože GetDirectories vrátí matici, můžete použít pro/každé prohlášení iterace nad každý podadresář. Pro každý podadresář použijte metodu GetFiles k iterování soubory v tomto adresáři. Hodnota textové pole ve formuláři jsou předána GetFiles. Textové pole obsahuje vyhledávací řetězec, který filtruje výsledky že GetFiles vrátí. Pokud všechny soubory odpovídají kritériím vyhledávání, přidají se Chcete-li do seznamu. Pro každý podadresář, který se nachází znovu volat DirSearch a předejte ji do podadresáře. Pomocí tohoto rekurzivní volání můžete hledat všechny podadresáře daného kořenového adresáře.

Úplného příkladu kódu

  1. Spustíte nový projekt Visual C# Windows aplikace. Výchozí formulář s názvem Form1 je vytvořen.
  2. V nabídce Zobrazit klepněte na zobrazení v okně Průzkumník řešení.
  3. V Průzkumníku řešení klepněte pravým tlačítkem myši Form1a potom klepněte na tlačítko Zobrazit kód.
  4. V okně Kód Form1 vyberte a odstraňte všechny existující kód.
  5. Vložte následující kód v okně Kód 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);
                }
            }
        }
    }
    Poznámka: Je nutné změnit kód v Visual Studio 2005 a Visual Studio 2008. Ve verzích sady Visual Studio, které jsou starší než Visual Studio 2005 Visual C# přidá jeden formulář do projektu při vytváření projektu model Windows Forms. Formulář je pojmenován Form1. V aplikaci Visual C# 2005 nebo novější dva soubory, které představují formuláře jsou pojmenovány Form1.cs a Form1.designer.cs. Napsat kód v souboru Form1.cs. V Návrháři model Windows Forms zapíše kód v souboru Form1.designer.cs.

    Chcete-li převést ukázkový kód pro Visual C# 2005 nebo Visual C# 2008, vytvoření nové aplikace Visual C# Windows a proveďte následující kroky:
    1. Zkopírujte objekt tlačítka , objekt textové pole a jiné objekty Windows částečné třídy Form1 v souboru Form1.Designer.cs.
    2. V kódu výše přidáte obsah části metodu InitializeComponent metodu InitializeComponent v souboru Form1.Designer.cs. Vložte obsah po aktuální obsah metodu InitializeComponent .
    3. Zkopírujte následující metody z kódu výše do Form1 třídy v souboru Form1.cs:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Přidáte pomocí System.IO; pomocí příkazu do souboru Form1.cs.
    Další informace o nástroji Designer model Windows Forms navštivte následující Web společnosti Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
  6. Stisknutím klávesy F5 sestavit a spustit vzorku program.

Odkazy

Další informace získáte kliknutím na číslo článku znalostní báze Microsoft Knowledge Base:
306777Jak číst textového souboru pomocí System.IO a Visual C#

Vlastnosti

ID článku: 303974 - Poslední aktualizace: 30. května 2013 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Klíčová slova: 
kbhowtomaster kbio kbmt KB303974 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku: 303974

Dejte nám zpětnou vazbu

 

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