Rekursives Durchsuchen von Verzeichnissen mit Visual Basic 2005 oder Visual Basic .net wie

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 306666 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D306666
Für eine Microsoft Visual C++ 2005 und Microsoft Visual C++-Version des in diesem Artikel finden Sie unter 307009.
Für eine Microsoft Visual C# 2005 und Microsoft Visual C# Version des in diesem Artikel finden Sie unter 303974.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

In diesem Artikel wird durch Code veranschaulicht, wie Sie rekursiv alle Unterverzeichnisse durchsucht, beginnend mit einem Root-Verzeichnis. Eine Suche Zeichenfolge wird angegeben, so dass Sie suchen können für Dateien, die eine bestimmte entsprechen Kriterien. Jeder Teil des Codes wird bei Bedarf erläutert. Eine Arbeitscode Beispiel wird am Ende des Artikels auch bereitgestellt werden.

Verzeichnis Rekursion ist eine allgemeine e/a-Aufgabe für Entwickler. "FileSystemObject" erleichtert diese Aufgabe für Component Object Model (COM) Anwendungen. Jetzt diese Aufgabe ist noch einfacher in das Microsoft geworden Framework. Ähnlich wie "FileSystemObject"die Klassen im System.IO -Namespace bieten eine objektorientierte Möglichkeit zum Zugriff auf Dateien und Verzeichnisse.

Anforderungen

Die folgende Liste führt die empfohlene Hardware, Software, Netzwerk Infrastruktur und Servicepacks, die Sie benötigen:
  • Microsoft Visual Studio 2005 oder Microsoft-Visual Studio .NET
Microsoft bietet Programmierbeispiele lediglich zur Veranschaulichung, ohne Gewährleistung entweder ob ausdrücklich oder konkludent. Dies beinhaltet, jedoch nicht beschränkt auf die stillschweigende Die Gewährleistungen der Handelsüblichkeit oder Eignung für einen bestimmten Zweck. In diesem Artikel wird davon ausgegangen, dass Sie mit der Programmiersprache vertraut sind, die demonstrierte und mit den Tools, die zum Erstellen und Debuggen verwendet werden Prozeduren. Microsoft-Supportmitarbeiter können helfen, Erläuterung der Funktionalität einer bestimmte Verfahren, aber sie diese Beispiele nicht ändern bieten hinzugefügt Funktionalität oder Konstrukt Verfahren für Ihre spezifischen Anforderungen.

Rekursives Durchsuchen von Verzeichnissen

Die Klassen zur Manipulation von Dateien und Verzeichnisse befinden sich im System.IO -Namespace. Bevor Sie mit diesen Klassen arbeiten, sollten Sie importieren. die folgenden Namespace in Ihr Projekt.
using System.IO;
				
Die Klassen im System.IO -Namespace bieten zahlreiche Optionen zum Arbeiten mit Dateien und Verzeichnisse. Der System.IO -Namespace stellt nicht nur Klassen, die Sie instanziieren können, es bietet außerdem die Datei- und Verzeichnisnamen Dienstprogrammklassen. Diese Klassen enthalten freigegebenen Methoden, die Sie aufrufen können, ohne dass eine Variable dieses Typs deklarieren. Beispielsweise können Sie das Verzeichnisobjekt erhalten die Unterverzeichnisse für einen bestimmten Verzeichnis.

Der folgende Code verwendet die freigegebene GetDirectories -Methode des Directory -Objekts, um ein Array von Zeichenfolgen zurückzugeben. Dieses Array enthält Pfadnamen der Unterverzeichnisse des Verzeichnisses C:\, sofern vorhanden.
Dim directories() As String = Directory.GetDirectories("C:\")
				
Das Directory -Objekt enthält auch die GetFiles -Methode. Der GetFiles -Methode können Sie ein Zeichenfolgenarray von Dateien abzurufen, entspricht ein bestimmte Kriterien. Im folgenden Codebeispiel wird das File -Objekt verwendet, um alle Dateien im Verzeichnis C:\ abzurufen, die Enden mit der Erweiterung .dll.
Dim files() As String = Directory.GetFiles("C:\", "*.dll")
				
GetDirectories -Methode und die GetFiles -Methode des Directory -Objekts sind, müssen Sie rekursiv nach Dateien suchen, die Suche Zeichenfolge überein. Die folgende Methode wird verwendet, auf die Rekursion verwendet.
    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
				
Die oben angegebene Programmquelltext übergibt eine Zeichenfolge, die das Verzeichnis enthält, an DirSearchgesucht werden soll. Dieser String-Wert ist der vollständige Pfadname des Verzeichnisses. Sie die GetDirectories -Methode können Sie die Unterverzeichnisse des Verzeichnisses abzurufen, ist an die Prozedur übergeben. Da GetDirectories -Methode ein Array zurückgibt, können Sie mithilfe einer for-Anweisung durchlaufen Sie jedes Unterverzeichnis. Verwenden Sie für jedes Unterverzeichnis GetFiles -Methode durchlaufen Sie die Dateien in diesem Verzeichnis. Der Wert der das Textfeld auf dem Formular wird an die GetFiles -Methode übergeben. Das Textfeld enthält die Suchzeichenfolge, das filtert, die Ergebnisse, die die GetFiles -Methode zurückgibt. Wenn alle Dateien mit den Suchkriterien entsprechen, werden Sie dem Listenfeld hinzugefügt. Rufen Sie für jedes Unterverzeichnis, das sich befindet DirSearch erneut, und übergeben Sie wird. Mit Hilfe dieses rekursiven Aufrufs, Sie können alle Unterverzeichnisse eines gegebenen Stammverzeichnisses suchen.

Das vollständige Codebeispiel

  1. Starten Sie eine neue Microsoft Visual Basic 2005 oder Microsoft Visual Grundlegende .net Windows-Anwendungsprojekt. Standardmäßig wird ein Formular mit dem Namen Form1 wird erstellt.
  2. Klicken Sie im Menü Ansicht klicken Sie auf, um Projektmappen-Explorer angezeigt.
  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste Form1, und klicken Sie dann auf Code anzeigen.
  4. Klicken Sie in das Codefenster von Form1 markieren und löschen Sie alle die vorhandenen Code.
  5. Fügen Sie folgenden Code in das Codefenster von Form1 Formular.
    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
    					
    Hinweis Sie müssen den Code im Visual Basic 2005 ändern. In der Standardeinstellung Visual Basic erstellt zwei Dateien für das Projekt, wenn Sie eine Windows Forms erstellen Projekt. Wenn das Formular Form1 benannt ist, werden die beiden Dateien, die das Formular darstellen benannte Form1.vb und Form1.Designer.vb. Sie schreiben den Code in der Datei Form1.vb. Windows Forms-Designer schreibt den Code in der Datei Form1.Designer.vb. Die Windows Forms-Designer verwendet das partial-Schlüsselwort, um die Implementierung von Teilen Form1 in zwei separate Dateien. Dieses Verhalten verhindert, dass die vom Designer generierten Code wird mit dem Code durchsetzt.

    Weitere Informationen finden Sie über die neuen Spracherweiterungen Visual Basic 2005 auf der folgenden Microsoft Developer Network (MSDN)-Website:
    http://msdn.Microsoft.com/en-us/library/ms379584 (VS.80) aspx
    Für Weitere Informationen zu partiellen Klassen und der Windows Forms Designer, finden Sie auf der folgenden MSDN-Website:
    http://msdn2.Microsoft.com/en-us/library/ms171843.aspx
  6. Drücken Sie F5, um das Beispiel erstellen und ausführen.

Informationsquellen

Weitere Informationen Informationen, klicken Sie auf die folgenden Artikelnummer finden Sie in der Microsoft Knowledge Base:
302309So lesen Sie eine Textdatei unter Verwendung von System.IO in 2005 von Visual Basic oder Visual Basic .net
Weitere allgemeine Informationen zu Visual Basic .NET, finden Sie unter den folgenden Usenet-Newsgroup:
Visual Basic

Eigenschaften

Artikel-ID: 306666 - Geändert am: Dienstag, 24. Juli 2012 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB306666 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 306666
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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