2016-04-26 12 views
2

Ich möchte das aktuelle Verzeichnis auf einer For Each-Schleife erhalten. Ich habe es mit Labels versucht, aber sie hängen einfach.Das aktuelle Verzeichnis der Verzeichnisse suchen

Hier ist mein aktueller Code:

For Each i As String In Directory.GetDirectories("C:\", "*.*", SearchOption.AllDirectories) 
    CurDirLbl.Text = i 
Next 

PS: Dies ist nicht für etwas bösartig, es ist ein Projekt an dem ich arbeite.

Antwort

1

Directory.GetDirectories zählt alle Dateien auf und gibt eine abfragbare Liste zurück.

Um zu versuchen und zu demonstrieren, wenn Sie Ihren Code aufrufen und Debug schreiben Sie eine Pause erhalten wird, während die Dateien und GetDirectories kehrt gefunden werden, dann werden alle Dateien ausgedruckt:

For Each filename As String In Directory.GetDirectories("C:\", "*.*", SearchOption.AllDirectories) 
    debug.writeline(filename) 
Next 

Sie kann natürlich selbst etwas codieren, das Verzeichnisse rekursiv aufzählt und das Verzeichnis meldet, nach dem es gerade sucht. Dies ist nicht so effizient, aber es gibt eine Rückmeldung an den Benutzer, während der Vorgang läuft:

Private WithEvents _de As New DirectoryEnumerator() 
Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click 
    Dim startPath As String = "C:\Windows\Temp" 
    _de.StartEnum(startPath) 

    'now we have the list of files 
    Debug.WriteLine("Files") 
    For Each filename In _de.FilesFound 
     Debug.WriteLine(filename) 
    Next 
End Sub 

Private Sub _de_CurrentDirectoryChanged(newDirectory As String) Handles _de.CurrentDirectoryChanged 
    Debug.WriteLine("Current Directory being searched:" & newDirectory) 
End Sub 

Private Class DirectoryEnumerator 
    Private _filesFound As List(Of String) 
    Public Event CurrentDirectoryChanged(newDirectory As String) 
    Public ReadOnly Property FilesFound As IReadOnlyList(Of String) 
     Get 
      Return _filesFound 
     End Get 
    End Property 
    Public Sub StartEnum(startPath As String) 
     _filesFound = New List(Of String) 
     EnumerateDirectory(startPath) 
    End Sub 

    Private Sub EnumerateDirectory(thisPath As String) 
     RaiseEvent CurrentDirectoryChanged(thisPath) 
     'add any files found in this directory to the list of files 
     _filesFound.AddRange(Directory.GetFiles(thisPath, "*.*")) 
     'enumerate any directories found 
     For Each thisDir In Directory.GetDirectories(thisPath) 
      EnumerateDirectory(thisDir) 
     Next 
    End Sub 
End Class 
+1

Ehrfürchtig, danke! –

Verwandte Themen