Как рекурсивно каталоги поиска с помощью Visual Basic 2005 или Visual Basic.NET

Переводы статьи Переводы статьи
Код статьи: 306666 - Vizualiza?i produsele pentru care se aplic? acest articol.
Для Microsoft Visual C++ 2005 и Microsoft Visual C++ .NET версии данной статьи, см. 307009.
Для Microsoft Visual C# 2005 и Microsoft Visual C#.NET версии данной статьи, см. 303974.
Развернуть все | Свернуть все

В этой статье

Аннотация

Данная статья содержит описание кода как рекурсивно Поиск в подкаталогах для файлов, начиная с корневого каталога. Поиск Таким образом, можно выполнить поиск задана строка для файлов, удовлетворяющих определенным критерии. Каждая часть кода объясняется при необходимости. Рабочий код Образец также приведена в конце статьи.

Каталог рекурсия — это распространенные задачи ввода-ВЫВОДА для разработчиков. В FileSystemObject упрощает эту задачу для модели компонентных объектов (COM) приложения. Теперь эта задача стала еще проще в Microsoft.NET Framework. Подобно FileSystemObject, классы System.IO пространство имен предоставляет объектно ориентированному подходу для доступа к файлам и каталоги.

Требования

В Ниже приведены Рекомендуемое оборудование, программное обеспечение, сети инфраструктура и пакеты обновлений, которые необходимы:
  • Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и либо или подразумеваемых. Это включает, но не ограничивается, подразумеваемые гарантии товарности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с языком программирования, которое было продемонстрированный подход и с помощью средств, которые используются для создания и отладки процедуры. Сотрудники службы поддержки Майкрософт могут пояснить из не изменяйте эти примеры конкретной процедуры, однако они позволяют добавлять функциональные возможности или конструкцию процедур для соответствия определенным требованиям.

Каталог рекурсии

Классы обработки файлов и каталогов находятся в 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 Visual Основные.Проект приложения Windows NET. По умолчанию форма с именем 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 Forms Basic создает два файла для проекта проект. Если в форму с именем Form1, являются два файла, которые представляют собой формы с именем Form1.vb и Form1.Designer.vb. Напишите код в файл Form1.vb. Конструктор Windows Forms записывает код в файле Form1.Designer.vb. В Конструктор Windows Forms использует ключевое слово partial разделить реализации Форма Form1 в две отдельные файлы. Это предотвращает созданный конструктором код перемежаемых кода.

    Для получения дополнительных сведений о новых улучшений языка Visual Basic 2005 посетите веб-узел Веб-узле Microsoft Developer Network (MSDN):
    http://MSDN.Microsoft.com/en-us/library/ms379584 (VS.80) .aspx
    Для получения дополнительных сведений о Windows Forms и разделяемых классов Конструктор, посетите веб-узле MSDN:
    http://msdn2.Microsoft.com/en-us/library/ms171843.aspx
  6. Нажмите клавишу F5 для построения и запуска образца.

Ссылки

Для получения дополнительных сведения, щелкните следующий номер статьи в База знаний корпорации Майкрософт:
302309Как прочитать текстовый файл с помощью System.IO в Visual Basic 2005 или Visual Basic.NET
Для получения общих сведений о Visual Basic .NET, см. следующую группу новостей Usenet.
Microsoft.Public.dotnet.Languages.vb

Свойства

Код статьи: 306666 - Последний отзыв: 6 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Ключевые слова: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB306666 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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