วิธีการไดเรกทอรีของ recursively ค้นหาโดยใช้ Visual C#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 303974 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับรุ่น Microsoft .NET Visual C++ ของบทความนี้ ดู 307009.
สำหรับรุ่น Microsoft Visual Basic .NET บทความนี้ ดู 306666.

บทความนี้อ้างอิง เมื่อต้องการ Microsoft .NET Framework ไลบรารีคลาส namespace ต่อไปนี้:
  • System.IO
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความที่มีการทีละขั้นตอนนี้แสดงวิธีการ ไดเรกทอรี recursively ค้นหาย่อยสำหรับแฟ้มในโปรแกรมประยุกต์ C# Windows แบบฟอร์ม A มีระบุสายอักขระการค้นหาเพื่อให้คุณสามารถค้นหาแฟ้มที่ตรงกับ เงื่อนไขของตัวแทน แต่ละส่วนของรหัสจะมีอธิบายตามความจำเป็น การทำงาน นอกจากนี้ยังมีโค้ดตัวอย่างในตอนท้ายของบทความ

ไดเรกทอรี สอบถามซ้ำคือ งาน IO ทั่วไปสำหรับนักพัฒนา FileSystemObjectทำงานนี้สำหรับคอมโพเนนต์วัตถุแบบจำลอง (COM) แอพลิเคชัน ขณะนี้ งานนี้เสียง่ายใน.NET คล้ายกับFileSystemObjectในSystem.IO namespace คลาสที่แสดงวิธีออบเจกต์ในการเข้าถึงแฟ้ม และ ไดเรกทอรี

ความต้องการ

  • Microsoft Visual C# 2005 หรือ Microsoft Visual C# .NET

สอบถามซ้ำของไดเรกทอรี

ระดับชั้นการจัดการไฟล์และไดเรกทอรีที่อยู่ในSystem.IO namespace ก่อนที่คุณทำงานกับคลาสที่เหล่านี้ คุณควรนำเข้า namespace ต่อไปนี้ลงในโครงการของคุณ:
using System.IO;
คลาสSystem.IO namespace ให้หลายชั้นช่วยให้คุณทำงานกับแฟ้ม และ ไดเรกทอรี คลาสที่เหล่านี้รวมถึงแฟ้มคลา ระดับชั้นไดเรกทอรี และคลาสที่ยูทิลิตี้ คลาสที่เหล่านี้จำนวนมากประกอบด้วยคง วิธีที่คุณสามารถเรียกใช้ โดยไม่ต้องประกาศตัวแปรชนิดนั้น ตัวอย่างเช่น คุณสามารถใช้วัตถุไดเรกทอรีเพื่อขอรับการไดเรกทอรีย่อยของการกำหนด ไดเรกทอรี

รหัสต่อไปนี้ใช้วิธีการGetDirectoriesคงที่ของวัตถุไดเรกทอรีที่จะส่งกลับอาร์เรย์ของสตริงการ อาร์เรย์นี้ประกอบด้วย ชื่อเส้นทางไดเรกทอรีไปยังไดเรกทอรีย่อยของไดเรกทอรี C ถ้ามี
string[] directories = Directory.GetDirectories("C:\\");
วัตถุไดเรกทอรีประกอบด้วยวิธีเรียกว่าGetFilesซึ่งช่วยให้คุณเรียกใช้อาร์เรย์แบบสตริงที่ของแฟ้มที่ตรงกับ เงื่อนไขบางอย่าง ตัวอย่างรหัสต่อไปนี้ใช้แฟ้มวัตถุเพื่อดึงข้อมูลแฟ้มทั้งหมดในไดเรกทอรี C ที่สิ้นสุด มีส่วนขยายเป็น.dll:
string[] files = Directory.GetFiles("C:\\", "*.dll");
วิธีการGetDirectoriesและGetFilesของวัตถุไดเรกทอรีมีทั้งหมดที่คุณจำเป็นต้อง recursively ค้นหาแฟ้มที่ สตริงการค้นหาสัมพันธ์กัน มีใช้วิธีการต่อไปนี้เพื่อทำการสอบถามซ้ำ:
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);
	}
}
รหัสก่อนหน้านี้ส่งผ่านสาย ซึ่งประกอบด้วยไดเรกทอรีที่ คุณต้องการค้นหา การDirSearch ค่าสายอักขระนี้เป็นเส้นทางแบบเต็มของไดเรกทอรี คุณ สามารถใช้GetDirectoriesเพื่อดึงข้อมูลที่ไดเรกทอรีย่อยของไดเรกทอรีที่จะถูกส่งผ่าน เข้าไปในกระบวนงานของคุณ เนื่องจากGetDirectoriesส่งกลับค่าอาร์เรย์ คุณสามารถใช้ตัวสำหรับ/ละคำเพื่อทำซ้ำใน บนแต่ละไดเรกทอรีย่อย สำหรับแต่ละไดเรกทอรีย่อย ใช้วิธีการGetFilesการทำซ้ำในไฟล์ในไดเรกทอรีนั้น ค่าของ กล่องข้อความบนฟอร์มของคุณจะถูกส่งผ่านไปGetFiles กล่องข้อความที่ประกอบด้วยสายอักขระการค้นหาที่กรองผลลัพธ์ ที่GetFilesส่งกลับค่า ถ้าแฟ้มตรงกับเงื่อนไขการค้นหา พวกเขาจะเพิ่ม กล่องรายการของคุณ สำหรับไดเรกทอรีแต่ละย่อยที่อยู่ โทรDirSearchอีกครั้ง และผ่านไดเรกทอรีย่อย โดยใช้การเรียกซ้ำนี้ คุณสามารถค้นหาไดเรกทอรีย่อยทั้งหมดของไดเรกทอรีรากที่ระบุ

ตัวอย่างรหัสเสร็จสมบูรณ์

  1. เริ่มต้นโครงการ Visual C# Windows แอพลิเคชันใหม่ โดยค่าเริ่มต้น มีฟอร์มที่ชื่อ Form1 สร้างขึ้น
  2. ในเมนูมุมมองคลิกเพื่อแสดงการ Explorer โซลูชัน
  3. ในโซลูชัน Explorer คลิกขวาForm1และจากนั้น คลิกรหัสของมุมมอง
  4. ในหน้าต่างรหัสของ Form1 เน้น และลบทั้งหมด รหัสที่มีอยู่
  5. วางรหัสต่อไปนี้ในหน้าต่างรหัสของ 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);
                }
            }
        }
    }
    หมายเหตุ คุณต้องเปลี่ยนรหัส ใน Visual Studio 2005 และ Visual Studio 2008 ใน Visual Studio รุ่นที่เก่ากว่า Visual Studio 2005, Visual C# เพิ่มฟอร์มหนึ่งโครงการเมื่อคุณสร้างโครงการ Windows Forms แบบฟอร์มจะมีชื่อว่า Form1 ใน Visual C# 2005 และรุ่นที่ใหม่กว่า ระบบมีชื่อแฟ้มสองที่แสดงแบบฟอร์ม Form1.cs และ Form1.designer.cs คุณสามารถเขียนรหัสในแฟ้ม Form1.cs ตัวออกแบบฟอร์ม Windows เขียนรหัสในแฟ้ม Form1.designer.cs

    เมื่อต้องการแปลงตัวอย่างรหัส Visual C# 2005 หรือ Visual C# 2008 สร้างโปรแกรมประยุกต์ Visual C# Windows ใหม่ และจากนั้น ทำตามขั้นตอนเหล่านี้:
    1. การคัดลอกวัตถุปุ่มวัตถุกล่องข้อความและวัตถุอื่น ๆ Windows เป็นคลาสบางส่วน Form1 ในแฟ้ม Form1.Designer.cs
    2. เพิ่มเนื้อหาของส่วนวิธีInitializeComponentในโค้ดข้างบนวิธีInitializeComponentในแฟ้ม Form1.Designer.cs วางเนื้อหาหลังจากเนื้อหาปัจจุบันของวิธีการInitializeComponent
    3. คัดลอกวิธีการต่อไปนี้จากรหัสข้างบนเป็นคลาส Form1 ในแฟ้ม Form1.cs:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. เพิ่มการใช้ System.IOการใช้คำสั่งไปยังแฟ้ม Form1.cs
    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวออกแบบฟอร์ม Windows แวะไปที่เว็บไซต์ Microsoft Developer Network (MSDN) ต่อไปนี้:
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
  6. กด F5 เพื่อสร้าง และเรียกใช้ตัวอย่าง โปรแกรม

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
306777วิธีการอ่านแฟ้มข้อความ โดยใช้ System.IO และ Visual C#

คุณสมบัติ

หมายเลขบทความ (Article ID): 303974 - รีวิวครั้งสุดท้าย: 30 พฤษภาคม 2556 - Revision: 5.0
ใช้กับ
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Keywords: 
kbhowtomaster kbio kbmt KB303974 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:303974

ให้ข้อเสนอแนะ

 

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