Jak rekurzivně vyhledávání adresářů pomocí jazyka Visual Basic 2005 nebo Visual Basic .NET

Microsoft Visual C++ 2005 a Microsoft Visual C++ .NET verzi tohoto článku v tématu
307009 .
Microsoft Visual C# 2005 a Microsoft Visual C# .NET verzi tohoto článku v tématu
303974 .

Souhrn

Prostřednictvím kódu Tento článek ukazuje, jak rekurzivně vyhledávání podadresáře pro soubory, počínaje kořenový adresář. Vyhledávací řetězec zadán tak, aby můžete hledat soubory, které vyhovují určitým kritériím. Každá část kódu je vysvětlena podle potřeby. Pracovní kód vzorek je k dispozici také na konci článku.

Adresář rekurze je běžný úkol IO pro vývojáře. FileSystemObject usnadňuje tento úkol aplikace modelu COM (Component Object). Tento úkol se stal nyní ještě snazší v Microsoft rozhraní.NET Framework. Podobný FileSystemObjecttřídy v oboru názvů System.IO poskytují způsob objektově orientovaný přístup k souborům a adresářům.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack, které potřebujete:
  • Microsoft Visual Studio 2005 nebo Microsoft Visual Studio .NET
Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen pouze na předpokládané záruky obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou pomoci vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo vytvářet postupy podle vašich konkrétních požadavků.

Adresář rekurze

Manipulace s třídy souborů a adresářů jsou umístěny v oboru názvů System.IO . Než začnete pracovat s těchto tříd, měli byste importovat následující obor názvů do projektu.
using System.IO;
Tříd v oboru názvů System.IO poskytují mnoho možností pro práci se soubory a adresáři. Obor názvů System.IO nejen poskytuje třídy, které můžete vytvořit instanci, obsahuje také nástroj třídy souborů a adresářů. Tyto třídy obsahují sdílené metody, které lze volat bez nutnosti deklarovat proměnné tohoto typu. Například můžete použít objekt adresáře získat podadresářů daném adresář.

Následující kód používá metodu GetDirectories sdíleného objektu adresáře vrátit pole řetězců. Toto pole obsahuje adresář cestu názvy podadresářů adresáře C:\, pokud takový existuje.
Dim directories() As String = Directory.GetDirectories("C:\")
Objekt adresáře také obsahuje metodu GetFiles . GetFiles metoda umožňuje načíst pole řetězců souborů, které vyhovují určitým kritériím. Následující příklad kódu používá objekt soubor načíst všechny soubory končící příponou DLL v adresáři C:\.
Dim files() As String = Directory.GetFiles("C:\", "*.dll")
GetDirectories metoda GetFiles metoda objektu adresáře jsou a že všeho, co je třeba hledat rekurzivně soubory, které odpovídají hledanému řetězci. Tato metoda slouží k provádění rekurze.
    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

Předcházející kód předává řetězec, který obsahuje adresář, který chcete hledat, DirSearch. Tato řetězcová hodnota je úplný název cesty adresáře. GetDirectories metoda slouží k načtení podadresářů adresáře, který je předán do procedury. Protože GetDirectories metoda vrátí matici, můžete použít pro/každý příkaz k iterování každého podadresáře. Pro každý podadresář použijte metodu GetFiles k iterování soubory v tomto adresáři. Hodnota textové pole na formuláři předána GetFiles metoda. Textové pole obsahuje vyhledávací řetězec, který filtruje výsledky, které GetFiles metoda vrátí. Pokud všechny soubory odpovídají kritériím vyhledávání, jsou přidány do vašeho seznamu. Pro každý podadresář, který je umístěn volání DirSearch znovu a předejte ji do podadresáře. Pomocí tohoto rekurzivní volání můžete vyhledat všechny podadresáře daného kořenového adresáře.

Ukázkový kód dokončení

  1. Spuštění nového projektu Microsoft Visual Basic 2005 nebo Microsoft Visual Basic .NET Windows aplikace. Ve výchozím nastavení je vytvořen formulář s názvem Form1.
  2. V nabídce Zobrazit klepněte na zobrazení v okně Průzkumník řešení.
  3. V Průzkumníku řešení klikněte pravým tlačítkem myši Form1a potom klepněte na tlačítko Zobrazit kód.
  4. V okně Kód Form1 vyberte a odstraňte všechny existující kód.
  5. Vložte následující kód v okně kód formuláře 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

    Poznámka: Je nutné změnit kód v jazyce Visual Basic 2005. Ve výchozím nastavení jazyka Visual Basic vytvoří dva soubory projektu při vytvoření projektu model Windows Forms. Pokud formulář s názvem Form1, dva soubory, které představují formuláře jsou pojmenovány Form1.vb a Form1.Designer.vb. Píšete kód v souboru Form1.vb. Návrhář model Windows Forms zapíše kód v souboru Form1.Designer.vb. Návrhář model Windows Forms používá klíčové slovo částečné provádění Form1 rozdělit do dvou samostatných souborů. Toto chování zabraňuje generované designer kód je proloženo kódu.

    Další informace o nová vylepšení jazyka Visual Basic 2005 navštivte následující Web společnosti Microsoft Developer Network (MSDN):Další informace o částečné třídy a Návrhář model Windows Forms naleznete na následujícím webu MSDN:
  6. Stisknutím klávesy F5 sestavit a spustit vzorku.

Odkazy

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
Jak číst textového souboru pomocí System.IO jazyka Visual Basic 2005 nebo Visual Basic .NET 302309

Další obecné informace o Visual Basic .NET naleznete v následujících diskusních skupin Usenet:
Vlastnosti

ID článku: 306666 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

Váš názor