Ako sa Rekurzívne vyhľadávanie adresárov pomocou Visual C#

Preklady článku Preklady článku
ID článku: 303974 - Zobraziť produkty, ktorých sa tento článok týka.
Pre Microsoft Visual C++ .NET verziu tohto článku, pozri 307009.
Pre Microsoft Visual Basic .NET verziu tohto článku, pozri 306666.

Tento článok odkazuje k nasledujúcemu priestoru názvov Microsoft .NET Framework triedy knižnica:
  • System.IO
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

Súhrn

Tento podrobný článok ukazuje ako Rekurzívne vyhľadávanie podadresárov na súbory v C# Windows Forms. A Hľadať reťazec je zadaný tak, že môžete vyhľadávať súbory ktoré zodpovedajú niektoré zástupné kritériá. Každý časť kódu je vysvetlený podľa potreby. Pracovný vzorka kódu je tiež k dispozícii na konci tohto článku.

Adresár rekurzia je spoločná úloha IO pre vývojárov. FileSystemObject zjednodušuje túto úlohu pre komponentu objekt Model (COM) aplikácie. Teraz sa stala túto úlohu ešte jednoduchšie v .NET. Podobný FileSystemObject, tried v priestore názvov System.IO poskytujú objektovo-orientovaný spôsob na prístup k súborom a adresáre.

Požiadavky

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

Adresár rekurzie

Triedu manipulácia súborov a adresárov zdržiavať sa v priestore názvov System.IO . Pred prácou s týmito triedy, by ste importovať týchto názvov do projektu:
using System.IO;
Namespace triedy System.IO poskytnúť veľa tried, dajte pracujete so súbormi a adresáre. Tieto triedy sú súbor tried, zoznam tried a pomocné triedy. Mnohé z týchto tried obsahovať statické metódy, ktoré môžete volať bez nutnosti deklarovať premenné tohto typu. Napríklad, môžete použiť objekt adresára získať podadresárov v danom adresár.

Nasledujúci kód používa statické GetDirectories metóda adresár objekt vrátiť pole reťazcov. Toto pole obsahuje cesta názvy adresárov do podadresárov adresára C, ak existuje.
string[] directories = Directory.GetDirectories("C:\\");
Objekt adresára obsahuje aj metódy nazývanej GetFiles , ktorý vám umožní získať súbory, ktoré zodpovedajú pole reťazcov určité kritériá. Nasledujúci kód vzorky používa súbor objektu na načítanie všetky súbory v adresári C, ktoré končia s príponou .dll:
string[] files = Directory.GetFiles("C:\\", "*.dll");
GetDirectories a GetFiles metódy objektu adresára sú všetko, čo potrebujete k Rekurzívne vyhľadávanie súborov, zápas hľadaný reťazec. Nasledujúca metóda sa používa na vykonanie rekurziu:
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);
	}
}
Predchádzajúci kód prechádza reťazec, ktorý obsahuje adresár, chcete, aby DirSearch. Túto hodnotu reťazca je úplnú cestu adresára. Ste pomocou GetDirectories môžete načítať podadresáre adresára, ktorý prechádza do svojho konania. Pretože GetDirectories vráti, môžete použiť pre/každý výkaz iteráciou po každom podadresári. Na každom podadresári, použite GetFiles metóda iteráciou cez súbory v tomto adresári. Hodnota textového poľa vo formulári je odovzdaný GetFiles. Blok textu obsahuje hľadaný reťazec, ktorý filtruje výsledky ktoré GetFiles vráti. Ak súbory zodpovedajú kritériám vyhľadávania, sú pridané do vášho zoznamu. Každý podadresára, ktorý sa nachádza, znova zavolať DirSearch a odovzdať ho podadresári. Pomocou tejto rekurzívne volanie, môžete hľadať všetky podadresáre v danom adresári.

Kompletný kód vzorky

  1. Začať nový projekt Visual C# Windows aplikácie. V predvolenom nastavení je formulár, ktorý sa nazýva Form1 vytvoril.
  2. V ponuke Zobraziť kliknite na položku Zobraziť roztok Explorer.
  3. V roztok Explorer, kliknite pravým tlačidlom myši na Form1a potom kliknite Zobraziť kód.
  4. V okne kód Form1, zvýraznenie a potom odstrániť všetky existujúci kód.
  5. Prilepte nasledujúci kód v okne kód na 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 Musíte zmeniť kód Visual Studio 2005 a Visual Studio 2008. Vo verziách programu Visual Studio, ktoré sú staršie ako program Visual Studio 2005, Visual C# pridá jeden formulár projektu pri vytváraní projektu Windows Forms. Formulár sa nazýva Form1. V Visual C# 2005 a novšie verzie, dva súbory, ktoré predstavujú samotný formulár, sú pomenované Form1.cs a Form1.designer.cs. Napíšete kód v súbore Form1.cs. Windows Forms Designer píše kód v súbore Form1.designer.cs.

    Previesť kód vzorky, Visual C# 2005 alebo Visual C# 2008, vytvoriť nové Visual C# Windows aplikácie, a potom postupujte nasledovne:
    1. Kopírovať tlačidlo objekt, blok textu objektu a ostatné objekty Windows pre čiastočné Form1 triedy v súbore Form1.Designer.cs.
    2. Pridať obsah InitializeComponent metóda sekcii vyššie uvedený kód do InitializeComponent metóda v súbore Form1.Designer.cs. Prilepí obsah po aktuálny obsah InitializeComponent metóda.
    3. Skopírujte nasledujúce metódy z vyššie uvedený kód do Form1 triedy v súbore Form1.cs:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Pridať pomocou System.IO; pomocou vyhlásenie na súbore Form1.cs.
    Ďalšie informácie o Windows Forms Designer, nájdete na webovej lokalite webová lokalita Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-us/library/ms173077.aspx
  6. Stlačením klávesu F5 stavať a spustite vzorky program.

Odkazy

Ďalšie informácie nájdete po kliknutí na nasledovné číslo článku publikovaného v Microsoft Knowledge Base:
306777Ako čítať textový súbor pomocou System.IO a Visual C#

Vlastnosti

ID článku: 303974 - Posledná kontrola: 30. mája 2013 - Revízia: 3.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Kľúčové slová: 
kbhowtomaster kbio kbmt KB303974 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 303974

Odošlite odozvu

 

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