วิธีการไดเรกทอรี recursively ค้นหาโดยใช้ Visual Basic 2005 หรือ Visual Basic .NET

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

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

สรุป

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

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

ความต้องการ

ที่ รายการต่อไปนี้แสดงฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ เครือข่าย โครงสร้างพื้นฐาน และ service pack ที่คุณต้องการ:
  • Microsoft Visual Studio ที่ 2005 หรือ Microsoft Visual Studio .NET
Microsoft แสดงตัวอย่างการเขียนโปรแกรมสำหรับภาพเท่านั้น โดยไม่มีการรับประกันอย่างใดอย่างหนึ่ง โดยชัดแจ้ง หรือโดยนัย ซึ่งรวมถึง แต่ไม่จำกัดเฉพาะ ที่โดยนัย การรับประกันของสินค้าหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ บทความนี้ สมมติว่า คุณคุ้นเคยกับภาษาการเขียนโปรแกรมที่มีการส่ง demonstrated และ ด้วยเครื่องมือที่ใช้ใน การสร้าง และแก้จุดบกพร่อง ขั้นตอน วิศวกรฝ่ายสนับสนุนของ Microsoft สามารถช่วยอธิบายฟังก์ชันการทำงานของตัว กระบวนงานที่เฉพาะเจาะจง แต่จะไม่ปรับเปลี่ยนตัวอย่างเหล่านี้เพื่อให้มีเพิ่ม กระบวนการทำงานหรือโครงสร้างให้สอดคล้องกับความต้องการเฉพาะของคุณ

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

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

รหัสต่อไปนี้ใช้วิธีการGetDirectoriesที่ใช้ร่วมกันของวัตถุไดเรกทอรีที่จะส่งกลับอาร์เรย์ของสตริงการ อาร์เรย์นี้ประกอบด้วย ชื่อเส้นทางไดเรกทอรีไปยังไดเรกทอรีย่อยของไดเรกทอรี c: ถ้ามี
Dim directories() As String = Directory.GetDirectories("C:\")
				
นอกจากนี้วัตถุไดเรกทอรียังประกอบด้วยวิธีการGetFiles วิธีการGetFilesช่วยให้คุณสามารถดึงข้อมูลแบบอาร์เรย์ของสายอักขระของแฟ้มที่ตรงกับ เงื่อนไขบางอย่าง ตัวอย่างรหัสต่อไปนี้ใช้วัตถุของแฟ้มที่จะดึงข้อมูลทั้งหมดของแฟ้มในไดเรกทอรี c:ที่สิ้นสุด โดยใช้นามสกุล.dll
Dim files() As String = Directory.GetFiles("C:\", "*.dll")
				
วิธีการGetDirectoriesและGetFilesเมธอดของวัตถุไดเรกทอรีมีทั้งหมดที่คุณต้องการ recursively การค้นหาแฟ้มที่ สายอักขระการค้นหาที่ตรงกัน มีใช้วิธีการต่อไปนี้เพื่อทำการสอบถามซ้ำ
    Sub DirSearch(ByVal sDir As String)
        Dim d As String
        Dim f As String

        Try
            For Each d In Directory.GetDirectories(sDir)
                For Each f In Directory.GetFiles(d, txtFile.Text)
                    lstFilesFound.Items.Add(f)
                Next
                DirSearch(d)
            Next
        Catch excpt As System.Exception
            Debug.WriteLine(excpt.Message)
        End Try
    End Sub
				
รหัสก่อนหน้านี้ส่งผ่านสาย ซึ่งประกอบด้วยไดเรกทอรีที่ คุณต้องการค้นหาDirSearchไว้ ค่าสายอักขระนี้เป็นชื่อเส้นทางแบบเต็มของไดเรกทอรี คุณ สามารถใช้เมธอดGetDirectoriesเพื่อดึงข้อมูลที่ไดเรกทอรีย่อยของไดเรกทอรีที่อยู่ ส่งผ่านเข้าไปในกระบวนงานของคุณ เนื่องจากวิธีการGetDirectoriesส่งกลับค่าอาร์เรย์ คุณสามารถใช้ตัวสำหรับ/ละใบแจ้งยอด ทำซ้ำในการผ่านแต่ละไดเรกทอรีย่อย สำหรับแต่ละได ใช้เมธอดGetFilesเพื่อที่ทำซ้ำในไฟล์ในไดเรกทอรี ค่าของ กล่องข้อความบนฟอร์มของคุณถูกส่งไปยังเมธอดGetFiles สายอักขระการค้นหาที่กรองประกอบด้วยกล่องข้อความนั้น ผลลัพธ์ที่ส่งกลับวิธีการGetFiles ถ้าแฟ้มใด ๆ ที่ตรงกับเงื่อนไขการค้นหา จะมี เพิ่มลงในกล่องรายการของคุณ สำหรับแต่ละไดที่อยู่ โทรDirSearchอีกครั้ง และส่งผ่านไดเรกทอรีย่อย โดยใช้การเรียกซ้ำนี้ คุณสามารถค้นหาไดเรกทอรีย่อยทั้งหมดของไดเรกทอรีรากที่กำหนด

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

  1. เริ่มการทำงานกับ Microsoft Visual Basic 2005 หรือ Microsoft Visual ใหม่ โครงการแอพลิเคชัน Windows .NET พื้นฐาน โดยค่าเริ่มต้น ฟอร์มที่ชื่อ Form1 ถูกสร้างขึ้น
  2. บนเมนูมุมมองคลิกเพื่อแสดงการแก้ไขปัญหา Explorer
  3. ในโซลูชัน Explorer คลิกขวาForm1และจากนั้น คลิกรหัสของมุมมอง
  4. ในหน้าต่างรหัส Form1 เน้น และลบทั้งหมด รหัสที่มีอยู่
  5. วางรหัสต่อไปนี้ในหน้าต่างรหัสของ Form1 แบบฟอร์ม
    Imports System.IO
    
    Public Class Form1
        Inherits System.Windows.Forms.Form
    
    #Region " Windows Form Designer generated code "
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Windows Form Designer.
            InitializeComponent()
    
            'Add any initialization after the InitializeComponent() call.
    
        End Sub
    
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
            Friend WithEvents cboDirectory As System.Windows.Forms.ComboBox
        Friend WithEvents txtFile As System.Windows.Forms.TextBox
        Friend WithEvents lstFilesFound As System.Windows.Forms.ListBox
        Friend WithEvents lblDirectory As System.Windows.Forms.Label
        Friend WithEvents lblFile As System.Windows.Forms.Label
        Friend WithEvents btnSearch As System.Windows.Forms.Button
            Private components As System.ComponentModel.IContainer
    
        'NOTE: The following procedure is required by the Windows Form Designer.
        'You can use the Windows Form Designer to modify it; however, do not
        'use the code editor to modify it.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.btnSearch = New System.Windows.Forms.Button()
            Me.lblFile = New System.Windows.Forms.Label()
            Me.cboDirectory = New System.Windows.Forms.ComboBox()
            Me.txtFile = New System.Windows.Forms.TextBox()
            Me.lstFilesFound = New System.Windows.Forms.ListBox()
            Me.lblDirectory = New System.Windows.Forms.Label()
            Me.SuspendLayout()
            '
            'btnSearch
            '
            Me.btnSearch.Location = New System.Drawing.Point(608, 248)
            Me.btnSearch.Name = "btnSearch"
            Me.btnSearch.TabIndex = 0
            Me.btnSearch.Text = "Search"
            '
            'lblFile
            '
            Me.lblFile.Location = New System.Drawing.Point(8, 16)
            Me.lblFile.Name = "lblFile"
            Me.lblFile.Size = New System.Drawing.Size(144, 16)
            Me.lblFile.TabIndex = 5
            Me.lblFile.Text = "Search for files containing:"
            '
            'cboDirectory
            '
            Me.cboDirectory.DropDownWidth = 112
            Me.cboDirectory.Location = New System.Drawing.Point(8, 128)
            Me.cboDirectory.Name = "cboDirectory"
            Me.cboDirectory.Size = New System.Drawing.Size(120, 21)
            Me.cboDirectory.TabIndex = 2
            Me.cboDirectory.Text = "ComboBox1"
            '
            'txtFile
            '
            Me.txtFile.Location = New System.Drawing.Point(8, 40)
            Me.txtFile.Name = "txtFile"
            Me.txtFile.Size = New System.Drawing.Size(120, 20)
            Me.txtFile.TabIndex = 4
            Me.txtFile.Text = "*.dll"
            '
            'lstFilesFound
            '
            Me.lstFilesFound.Location = New System.Drawing.Point(152, 8)
            Me.lstFilesFound.Name = "lstFilesFound"
            Me.lstFilesFound.Size = New System.Drawing.Size(528, 225)
            Me.lstFilesFound.TabIndex = 1
            '
            'lblDirectory
            '
            Me.lblDirectory.Location = New System.Drawing.Point(8, 96)
            Me.lblDirectory.Name = "lblDirectory"
            Me.lblDirectory.Size = New System.Drawing.Size(120, 23)
            Me.lblDirectory.TabIndex = 3
            Me.lblDirectory.Text = "Look In:"
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(688, 273)
            Me.Controls.AddRange(New System.Windows.Forms.Control() _
                {Me.lblFile, Me.txtFile, Me.lblDirectory, Me.cboDirectory, _
                Me.lstFilesFound, Me.btnSearch})
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
    
        End Sub
    
    #End Region
    
        Private Sub btnSearch_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles btnSearch.Click
            lstFilesFound.Items.Clear()
            txtFile.Enabled = False
            cboDirectory.Enabled = False
            btnSearch.Text = "Searching..."
            Me.Cursor = Cursors.WaitCursor
            Application.DoEvents()
            DirSearch(cboDirectory.Text)
            btnSearch.Text = "Search"
            Me.Cursor = Cursors.Default
            txtFile.Enabled = True
            cboDirectory.Enabled = True
        End Sub
    
        Sub DirSearch(ByVal sDir As String)
            Dim d As String
            Dim f As String
    
            Try
                For Each d In Directory.GetDirectories(sDir)
                    For Each f In Directory.GetFiles(d, txtFile.Text)
                        lstFilesFound.Items.Add(f)
                    Next
                    DirSearch(d)
                Next
            Catch excpt As System.Exception
                Debug.WriteLine(excpt.Message)
            End Try
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load
            Dim s As String
            cboDirectory.Items.Clear()
            For Each s In Directory.GetLogicalDrives()
                cboDirectory.Items.Add(s)
            Next
            cboDirectory.Text = "C:\"
        End Sub
    End Class
    					
    หมายเหตุ คุณต้องเปลี่ยนรหัสใน Visual Basic 2005 โดยค่าเริ่มต้น Visual Basic สร้างแฟ้มที่สองสำหรับโครงการเมื่อคุณสร้างแบบฟอร์ม Windows โครงการ ถ้าแบบฟอร์มจะมีชื่อว่า Form1 แฟ้มทั้งสองที่แสดงแบบฟอร์มได้ ชื่อ Form1.vb และ Form1.Designer.vb คุณสามารถเขียนรหัสในแฟ้ม Form1.vb ตัวออกแบบฟอร์ม Windows เขียนรหัสในแฟ้ม Form1.Designer.vb ที่ ตัวออกแบบฟอร์ม Windows ใช้คำสำคัญบางส่วนเพื่อแบ่งการใช้งานของ Form1 เป็นแฟ้มแยกต่างหากที่สอง ลักษณะการทำงานนี้ทำให้ไม่สามารถสร้างการออกแบบขึ้น รหัสจากกำลังค่อย ๆ มาพร้อมกับโค้ดของคุณ

    สำหรับข้อมูลเพิ่มเติม เกี่ยวกับการเพิ่มใหม่ Visual Basic 2005 ภาษาประสิทธิภาพ โปรดเยี่ยมชมต่อไปนี้ เว็บไซต์ของ Microsoft สำหรับนักพัฒนาเครือข่าย (MSDN):
    .aspx http://msdn.microsoft.com/en-us/library/ms379584 (VS.80)
    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระดับชั้นบางส่วนและแบบฟอร์ม Windows ดีไซน์เนอร์ MSDN เว็บไซต์ต่อไปนี้:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  6. กด F5 เพื่อสร้าง และเรียกใช้ตัวอย่างนี้

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

สำหรับข้อมูลเพิ่มเติม รายละเอียด ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในการ Microsoft Knowledge Base:
302309วิธีการอ่านแฟ้มข้อความ โดยใช้ System.IO ใน Visual Basic 2005 หรือ ใน Visual Basic .NET
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Visual Basic .NET ดูกลุ่มข่าวสาร usenet บนดังต่อไปนี้:
Visual Basic

คุณสมบัติ

หมายเลขบทความ (Article ID): 306666 - รีวิวครั้งสุดท้าย: 24 กรกฎาคม 2555 - Revision: 3.0
ใช้กับ
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB306666 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:306666

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

 

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