Ordner durchsuchen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von m97y97.

    Ordner durchsuchen

    Hallo ich wollte für eine Funktion alle Ordner am Computer nach Dateien durchsuchen.
    Ich hab schon mal folgenden Code:

    VB.NET-Quellcode

    1. Private Sub Search()
    2. Dim Drivers, Folders, Files As New List(Of String)
    3. For index As Integer = 0 To IO.DriveInfo.GetDrives.Count - 1
    4. If IO.DriveInfo.GetDrives.ElementAt(index).IsReady Then
    5. Drivers.Add(IO.DriveInfo.GetDrives.ElementAt(index).Name)
    6. End If
    7. Next
    8. For index As Integer = 0 To Drivers.Count - 1
    9. Try
    10. Folders.AddRange(IO.Directory.GetDirectories(Drivers.Item(index), "*.*", IO.SearchOption.AllDirectories).ToList)
    11. Catch ex As UnauthorizedAccessException
    12. End Try
    13. Next
    14. For index As Integer = 0 To Folders.Count - 1
    15. Files.AddRange(My.Computer.FileSystem.GetFiles(Folders.Item(index), FileIO.SearchOption.SearchTopLevelOnly, "*.txt").ToList)
    16. Next
    17. For index As Integer = 0 To Files.Count - 1
    18. ListBox1.Items.Add(Files.Item(index))
    19. Next
    20. End Sub

    Wenn er einen Ordner gefunden hat auf den er nicht zugreifen kann (Fehlende Berechtigung)
    lässt er das Ganze Laufwerk aus. Ist auch logisch in meinem Code.
    Das möchte ich aber nicht.
    ich möchte alle Ordner nach Dateien durchsuchen außer die auf die ich keine Berechtigung habe.
    Nun ja, dann musst du den Code eben so umschreiben, dass er nur die umgeht, auf die du keine Berechtigung hast.

    Also so in etwa:

    Quellcode

    1. Für jedes Laufwerk in Laufwerke
    2. Für jeden Ordner in Laufwerk.Ordner
    3. Try
    4. ... Add(Ordner ...)
    5. Catch ...
    6. Nächster Ordner
    7. Nächstes Laufwerk

    D.h. statt AddRange jedes einzelne durch Add hinzufügen.

    Ich hoffe ich hab deine Problemstellung richtig erkannt... Falls nichts, tuts mir leid.
    aber er soll ja auch so machen

    Laufwerk-Unterordner (Hab Berechtigung)-Unterordner (Hab Berechtigung)-Unterordner (Hab KEINE Berechtigung)

    In diesem Falle soll er alle Ordner durchsuchen auf die er Berechtigung hat und dessen unterordner und wieder dessen usw.
    Ich habe eine Methode für das rekursive Durchsuchen geschrieben.
    Sie übergeht alle Verzeichnisse (inkl. Unterverzeichnisse, logisch), auf die man keine Zugriffsberechtigung hat...

    VB.NET-Quellcode

    1. Function GetSubDirectories(ByVal Path As String) As List(Of String)
    2. Dim dirs As List(Of String) = New List(Of String)
    3. Dim di As New IO.DirectoryInfo(Path)
    4. If (Not IO.Directory.Exists(Path)) Then
    5. Debug.WriteLine("Directory " + Path + " not found")
    6. Return dirs
    7. End If
    8. For Each d As IO.DirectoryInfo In di.GetDirectories()
    9. Try
    10. dirs.Add(d.FullName)
    11. dirs.AddRange(GetSubDirectories(d.FullName))
    12. Catch ex As UnauthorizedAccessException
    13. Debug.WriteLine("Failed to access " + d.FullName)
    14. End Try
    15. Next
    16. Return dirs
    17. End Function
    Hoffe das hilft.

    LG