如何使用 Visual Basic 2005年或 Visual Basic 的.net 遞迴方式搜尋目錄

文章翻譯 文章翻譯
文章編號: 306666 - 檢視此文章適用的產品。
本文曾發行於 CHT306666
Microsoft Visual c + + 2005年和 Microsoft VisualC + +.net 新版本文中,請參閱 307009.
Microsoft Visual C# 2005年和 Microsoft Visual請參閱本文中,C#.net 版 303974.
全部展開 | 全部摺疊

在此頁中

結論

本篇文章示範透過程式碼如何以遞迴方式檔案中,開頭是根目錄的子目錄中搜尋。搜尋指定字串,讓您能夠搜尋符合特定的檔案準則。每個部分的程式碼會說明必要時。有效的程式碼在文件結尾處也提供範例。

目錄遞迴是常見的 IO 工作,讓開發人員。依然簡化這項工作的元件物件模型 (COM)應用程式。現在這項工作已經成為更容易在 Microsoft.net架構。類似於依然System.IO命名空間中的類別提供物件導向的方式來存取檔案及目錄搜尋。

需求

[以下概括列出建議的硬體、 軟體、 網路基礎結構,您需要的 service pack:
  • Microsoft Visual Studio 2005年或 Microsoft Visual Studio.NET
Microsoft提供程式設計範例僅供說明,不保證是明示或默示的保證。這包含,但不限於,暗示適售性或適合某特定用途之擔保責任。這份文件假設您已熟悉的程式設計語言,指之示範以及可用來建立和偵錯工具程序。Microsoft 技術支援工程師可以協助說明的功能特定程序,但它們不會修改這些範例以提供新增若要滿足特定要求的功能或建構函式程序。

目錄遞迴

檔案及目錄的管理類別位於System.IO命名空間。您可以使用這些類別之前,您應該在匯入下列命名空間至您的專案。
using System.IO;
				
System.IO命名空間的類別提供許多選項來使用檔案及目錄搜尋。取得系統暫時路徑做不僅提供類別,您可以具現化,它也會提供檔案和目錄的公用程式類別。這些類別包含共用您不需要宣告該型別的變數時,您可以呼叫的方法。比方說,您可以使用取得的子目錄的目錄物件指定目錄。

下列程式碼會使用共用的GetDirectories方法的目錄物件,傳回字串陣列。這個陣列中包含用來 C:\ 目錄中,如果有任何的子目錄的目錄路徑名稱。
Dim directories() As String = Directory.GetDirectories("C:\")
				
目錄物件也包含GetFiles方法。GetFiles方法可讓您擷取的字串陣列,符合的檔案特定的條件。下列程式碼範例使用檔案物件來擷取所有 C:\ 目錄中的檔案結尾的檔案具有.dll 副檔名。
Dim files() As String = Directory.GetFiles("C:\", "*.dll")
				
GetDirectories方法與目錄物件的GetFiles方法,就只會在您要以遞迴方式搜尋的檔案,比對搜尋字串。下列的方法用來執行遞迴。
    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基本的.net Windows 應用程式專案。根據預設,名為 Form1 的表單會建立。
  2. 在 [檢視] 功能表中,按一下以顯示 [方案總管]。
  3. 在方案總管] 中,[ 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當您建立 Windows Form basic 會建立兩個專案的檔案專案。如果表單名為 Form1,代表表單的兩個檔案是具名的 Form1.vb 並 Form1.Designer.vb。您可以撰寫程式碼 Form1.vb 檔案中。Windows Form 設計工具會編寫程式碼在 Form1.Designer.vb 檔案中。[Windows Form 設計工具會使用部分關鍵字,來劃分的實作Form1 成兩個不同的檔案。這樣可以阻止設計工具產生從程式碼位置顛倒的程式碼。

    如需詳細資訊關於新的 Visual Basic 2005年程式語言加強功能,請造訪下列Microsoft 開發人員網路 (MSDN) 網站:
    http://msdn.microsoft.com/en-us/library/ms379584 (VS.80).aspx
    如需有關部分類別和 Windows Form設計工具中,請造訪下列 MSDN 網站:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  6. 按下 F5 以建置並執行範例。

?考

如需詳細資訊資訊,請按一下下面的文章編號,檢視中的文件Microsoft 知識庫 」:
302309如何讀取文字檔或 Visual Basic 的.net Visual Basic 2005年中使用 System.IO
如需 Visual Basic 較一般資訊.NET,請參閱下列的 Usenet 新聞群組:
Visual Basic

屬性

文章編號: 306666 - 上次校閱: 2012年7月24日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
關鍵字:?
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB306666 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:306666
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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