您目前已離線,請等候您的網際網路重新連線

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

本文曾發行於 CHT306666
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:306666
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.IOPublic 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 SubEnd 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) 網站: 如需有關部分類別和 Windows Form設計工具中,請造訪下列 MSDN 網站:
  6. 按下 F5 以建置並執行範例。
参考
如需詳細資訊資訊,請按一下下面的文章編號,檢視中的文件Microsoft 知識庫 」:
302309如何讀取文字檔或 Visual Basic 的.net Visual Basic 2005年中使用 System.IO
如需 Visual Basic 較一般資訊.NET,請參閱下列的 Usenet 新聞群組:

警告:本文為自動翻譯

內容

文章識別碼:306666 - 最後檢閱時間:07/24/2012 06:28:00 - 修訂: 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
意見反應
document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">