Pfad rekursiv durchsuchen: Scheint nicht alles mitzunehmen...

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Pfad rekursiv durchsuchen: Scheint nicht alles mitzunehmen...

    Hallo,

    ich habe hier einen Code, welchen ich dazu benutze einen Pfad nach allen Dateien zu durchforsten:

    VB.NET-Quellcode

    1. Public Sub ScanDir(ByVal curDir As String)
    2. Try
    3. For Each Folder As String In IO.Directory.GetDirectories(curDir)
    4. For Each File As String In IO.Directory.GetFiles(Folder)
    5. FileList.Add(File)
    6. Next
    7. If IO.Directory.GetDirectories(Folder).GetUpperBound(0) > 0 Then
    8. ScanDir(Folder)
    9. End If
    10. Next
    11. Catch : End Try
    12. End Sub

    Hier habe ich mal testweise meinen Datenträger E: angegeben und am Ende ist die Liste (FileList.Count) nur 5488 groß obwohl meine externe Fesplatte weit mehr Dateien haben müsste.

    Wieso also finde ich nicht alle Dateien?

    Gruß,
    Tim
    Entweder habe ich einen Denkfehler, oder du speicherst die Files, die direkt im Ordner liegen, gar nicht, weil du sofort in den Unterordner gehst. Wenn aber keins vorhanden ist, werden die Dateien gar nicht gespeichert.

    Nehmen wir an, du hast unter HauptOrdner noch 2 Ordner mit je 2 Dateien und 3 Dateien extra.
    HauptOrdner
    -Ordner1
    --File1_1
    --File1_2
    -Ordner2
    --File2_1
    --File2_2
    -File1
    -File2
    -File3

    Nach deinem Code geht er in den Hauptordner und dann direkt in die Unterordner, die File1-3 werden gar nicht erfasst. In den Unterordner werden gleich FileX_1-2 erfasst, aber dann geht er wieder rein und sucht nach weiteren Unterordnern.

    D.h. dir müssten nur die oberen Dateien fehlen...
    Hab hier eine Funktion welche alle Dateien korrekt einließt.

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Gibt die Größe des gewählten Verzeichnisses retour
    3. ''' </summary>
    4. ''' <param name="path">Root Folder</param>
    5. ''' <param name="includeSubDirectories">Recursive durch Subdirectories</param>
    6. ''' <returns></returns>
    7. ''' <remarks></remarks>
    8. Public Shared Function GetDirectorySize(ByVal path As String, ByVal includeSubDirectories As Boolean) As Long
    9. Dim size As Long = 0
    10. ' get sub directories (recursive)
    11. If includeSubDirectories Then
    12. Try
    13. Dim subDirectories As String() = Directory.GetDirectories(path)
    14. For Each subDirectory As String In subDirectories
    15. size += GetDirectorySize(subDirectory, includeSubDirectories)
    16. Next
    17. Catch ex As Exception
    18. Debug.Print(ex.Message)
    19. End Try
    20. End If
    21. ' get files and add size
    22. Try
    23. Dim fileNames As String() = Directory.GetFiles(path)
    24. For Each fileName As String In fileNames
    25. Dim fileInfo As New FileInfo(fileName)
    26. size += fileInfo.Length
    27. Next
    28. Catch ex As Exception
    29. Debug.Print(ex.Message)
    30. End Try
    31. Return size
    32. End Function


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten