Alle Dateien eines Datenträgers auflisten

  • VB.NET

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

    Alle Dateien eines Datenträgers auflisten

    Hey,

    Ich wollte fragen wie man es realisieren könnte, alle Programme auf einem Datenträger anzeigen zu lassen. z.B. auf dem Datenträger "C:". Das heisst es geht auf C: -> Programme -> Windows etc. und es müsste halt die Ordner selbst runterarbeiten bis zur letzten Datei. Bis jetzt weiss ich nur, wie man nur einen Ordner abfragen kann :

    VB.NET-Quellcode

    1. Try
    2. For Each SubFolder As String In Directory.GetFiles("C:\")
    3. ListBox1.Items.Add(SubFolder)
    4. Next
    5. For Each SubFolder As String In Directory.GetDirectories("C:\")
    6. ListBox1.Items.Add(SubFolder)
    7. Next
    8. Catch ex As Exception
    9. End Try
    Eine alternative Variante, die nach mehreren Dateimustern suchen kann das Ergebnis am Ende sortiert
    und die Rekursion durch einen Stack ersetzt:

    VB.NET-Quellcode

    1. Public Class FileHelper
    2. ''' <summary>
    3. ''' Erstellt eine Dateiliste rekursiv.
    4. ''' </summary>
    5. ''' <remarks>
    6. ''' Es kann nach mehreren Mustern gesucht werden, die durch ";" getrennt werden.
    7. ''' Dateien und Verzeichnisse auf die kein Zugriff besteht werden ausgelassen.
    8. ''' </remarks>
    9. ''' <param name="path">Der Ausgangspfad.</param>
    10. ''' <param name="searchPatterns">Eine Liste von Suchmustern</param>
    11. ''' <returns>eine List&lt;String&gt;</returns>
    12. Public Shared Function FindFilesRecursive( _
    13. ByVal path As String, _
    14. ByVal searchPatterns As String) As List(Of String)
    15. If path Is Nothing Then
    16. Throw New ArgumentNullException("path")
    17. End If
    18. path = path.Trim()
    19. If path.Length = 0 Then
    20. Throw New ArgumentException("path")
    21. End If
    22. If String.IsNullOrEmpty(searchPatterns) Then
    23. Throw New ArgumentNullException("searchPatterns")
    24. End If
    25. ' Anfangspfad vorgeben (hier mögliche Ausnahme)
    26. path = System.IO.Path.GetFullPath(path)
    27. Dim fileList As New List(Of String)
    28. ' Trennen der Suchmuster
    29. Dim searchPatternList As New List(Of String)
    30. For Each pattern As String In searchPatterns.Split(";"c)
    31. pattern = pattern.Trim()
    32. If pattern.Length > 0 Then
    33. searchPatternList.Add(pattern)
    34. End If
    35. Next
    36. If searchPatternList.Count = 0 Then
    37. Return fileList
    38. End If
    39. Dim directoryStack As New Stack(Of String)
    40. directoryStack.Push(path)
    41. ' Verzeichnisse rekursiv (via Stack) durchlaufen
    42. Do While directoryStack.Count > 0
    43. Dim directory As String = directoryStack.Pop()
    44. Try
    45. ' Durchlaufen aller Suchmuster
    46. For Each pattern As String In searchPatternList
    47. ' ... und zur Dateiliste hinzufügen
    48. fileList.AddRange(System.IO.Directory.GetFiles(directory, pattern))
    49. Next
    50. Catch ex As UnauthorizedAccessException
    51. System.Diagnostics.Debug.WriteLine("No File Access " & directory)
    52. ' Kein Zugriff
    53. End Try
    54. ' Einfügen der Unterverzeichnisse in den Stack
    55. Try
    56. For Each subDirectory As String In System.IO.Directory.GetDirectories(directory)
    57. directoryStack.Push(subDirectory)
    58. Next
    59. Catch ex As UnauthorizedAccessException
    60. ' Kein Zugriff
    61. System.Diagnostics.Debug.WriteLine("No Directory Access " & directory)
    62. End Try
    63. Loop
    64. ' Sortiert die Dateinamen
    65. fileList.Sort(StringComparer.OrdinalIgnoreCase)
    66. Return fileList
    67. End Function
    68. ''' <summary>
    69. ''' Kleiner Test zu FindFilesRecursive
    70. ''' </summary>
    71. <Conditional("Debug")> _
    72. Friend Shared Sub FindFileRecursiveTest()
    73. Dim path As String = "E:"
    74. 'Dim searchPatterns As String = "*.wav"
    75. Dim searchPatterns As String = "*.mp3;*.wav;*.wmv;*.wma"
    76. Dim fileList As List(Of String) = FileHelper.FindFilesRecursive(path, searchPatterns)
    77. Dim builder As New System.Text.StringBuilder(128)
    78. For Each name As String In fileList
    79. builder.AppendLine(name)
    80. Next
    81. System.IO.File.WriteAllText("F:\fileslist.txt", builder.ToString())
    82. End Sub
    83. End Class

    Quelle: MSDN Elmar Boye
    Thread