如何通过使用 Visual Basic 2005年或 Visual Basic.net 的递归搜索目录

文章翻译 文章翻译
文章编号: 306666 - 查看本文应用于的产品
本文的发布号曾为 CHS306666
Microsoft Visual c + + 2005年和 Microsoft 可视化这篇文章,c + +.net 版本请参阅 307009.
Microsoft Visual C# 2005年和 Microsoft 可视化这篇文章,C#.net 版本请参阅 303974.
展开全部 | 关闭全部

本文内容

概要

本文通过代码演示如何以递归方式搜索文件开头的根目录的子目录。搜索以便您可以搜索指定字符串匹配特定的文件条件。代码的每个部分介绍了必要。工作代码文章结尾处还提供了示例。

目录递归是为开发人员提供一个通用的 IO 任务。FileSystemObject简化此任务组件对象模型 (COM)应用程序。现在此任务变得更容易在 Microsoft.net框架。类似FileSystemObjectSystem.IO命名空间中的类提供访问文件的面向对象的方法和目录。

要求

"下表列出了推荐使用的硬件、 软件、 网络基础结构和所需的服务包:
  • Microsoft Visual Studio 2005年或 Microsoft Visual Studio.NET
Microsoft提供编程示例只用于说明,无担保或者明示或暗示保证。这包括但不限于暗示适销性或对特别用途适用性的担保。这篇文章假定您熟悉正在进行的编程语言演示以及用于创建和调试工具过程。Microsoft 的支持工程师可以帮助解释的功能特定的过程,但它们不会修改这些示例以提供添加功能或构造过程以满足您的特定要求。

目录递归

文件和目录的操作类位于System.IO命名空间中。使用这些类之前,应将导入在项目中将以下命名空间。
using System.IO;
				
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 可视化基本.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 窗体时,基本创建项目的两个文件项目。如果窗体名为 Form1,则表示窗体的两个文件命名的 Form1.vb 和 Form1.Designer.vb。在 Form1.vb 文件中编写的代码。Windows 窗体设计器在 Form1.Designer.vb 文件中编写代码。"Windows 窗体设计器使用 partial 关键字来划分的实现两个单独的文件到 Form1。此行为可防止设计器生成从散乱与您的代码的代码。

    有关详细信息有关新的 Visual Basic 2005年语言增强功能,请访问以下Microsoft 开发人员网络 (MSDN) 的 Web 站点:
    http://msdn.microsoft.com/en-us/library/ms379584 (VS.80).aspx
    有关分部类和 Windows 窗体的详细信息设计器中,请访问下面的 MSDN 网站:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  6. 按 F5 键生成并运行该示例。

参考

有关详细信息信息,请单击下面的文章编号,以查看在文章微软知识文库:
302309如何通过使用 System.IO 或 Visual Basic.net Visual Basic 2005年中读取文本文件
有关 Visual Basic 的详细信息.NET,请参阅下面的 Usenet 新闻组:
Visual Basic

属性

文章编号: 306666 - 最后修改: 2012年7月24日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
关键字:?
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB306666 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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