Verzeichnis rekursiv durchsuchen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von TODuke.

    Verzeichnis rekursiv durchsuchen

    Hallo,
    ich habe ein Verzeichnis in dem mehrere Unterverzeichnisse liegen, in denen sowohl Dateien als auch weitere Unterverzeichnisse liegen.
    Da bietet sich natürlich eine rekursive Funktion an. Mein Problem liegt jetzt aber darin erst mal ins erste Untervezeichnis zu springen und die darin enthaltenen Dateien (Verzeichnisse und Dateien) in einem Command-Fenster auszugeben.
    Mein bisheriger Code sieht bisher so aus (noch etwas bloated):

    VB.NET-Quellcode

    1. Imports System.IO
    2. Module Module1
    3. Sub Test()
    4. Dim strQuellVerz As String
    5. Dim strZielVerz As String
    6. Dim strDateiliste() As String
    7. Dim strOrdnerliste() As String
    8. Dim strMangadir() As String
    9. Dim strManganame As String
    10. Dim strManganr As String
    11. Dim Ergebnis As String
    12. Dim i As Integer
    13. strQuellVerz = ("C:\Users\Matthias\Documents\17. Test")
    14. 'Try
    15. ' If Directory.Exists(strQuellVerz) Then
    16. ' Console.WriteLine("Quellverzeichnis existiert!")
    17. ' End If
    18. ' Console.WriteLine(strQuellVerz)
    19. 'Catch
    20. ' Console.WriteLine("Verzeichnis nicht gefunden!")
    21. 'End Try
    22. strOrdnerliste = Directory.GetFileSystemEntries(strQuellVerz)
    23. Console.WriteLine(Directory.GetCurrentDirectory(strOrdnerliste(i)))
    24. 'Ergebnis = Directory.SetCurrentDirectory(strOrdnerliste(0))
    25. Console.WriteLine(Directory.GetCurrentDirectory())
    26. 'For i = 0 To strOrdnerliste.Count - 1
    27. ' 'Console.WriteLine(Ordnerliste(i))
    28. ' Console.WriteLine(Directory.GetCurrentDirectory(i))
    29. ' Directory.SetCurrentDirectory(i)
    30. 'Next
    31. End Sub



    mfg
    TODuke
    Hallo,

    ich würde es einfach ähnlich wie SystemUnknown es empfohlen hat einfach das .NET Framework selbst machen lassen:

    Ich habe es mit C# gemacht, da ich kein VB.NET mehr mache:

    VB.NET-Quellcode

    1. string startDir = "C:\\Program Files";
    2. try {
    3. System.IO.Directory.EnumerateFiles(startDir, "*.*", System.IO.SearchOption.AllDirectories).All(d => {
    4. Console.WriteLine(d);
    5. return true;
    6. });
    7. } catch (Exception ex) {
    8. Console.WriteLine(ex.Message);
    9. }
    10. Console.ReadLine();


    habe es mal duch einen VB.NET Konverter gejagt und das ist dabei rausgekommen, musst mal testen obs es so klappt :)

    VB.NET-Quellcode

    1. Dim startDir As String = "C:\Program Files"
    2. Try
    3. System.IO.Directory.EnumerateFiles(startDir, "*.*", System.IO.SearchOption.AllDirectories).All(Function(d) Do
    4. Console.WriteLine(d)
    5. Return True
    6. End Function)
    7. Catch ex As Exception
    8. Console.WriteLine(ex.Message)
    9. End Try
    10. Console.ReadLine()


    Du musst nur auf die Verzeichnisse aufpassen auf die das Programm keinen Zugriff hat, dann knallts nämlich.
    Hallo und besten Dank für die Antworten soweit.
    Lasse das ganze jetzt so ablaufen:

    VB.NET-Quellcode

    1. Sub Main()
    2. strStartVerz = "C:\Users\Matthias\Documents\17. Test"
    3. Try
    4. Dim strVerz1 = From dirfile In Directory.EnumerateDirectories(strStartVerz) ' , "*.*", SearchOption.AllDirectories)
    5. For Each f In strVerz1
    6. strMangaVerz = f
    7. Console.WriteLine(strMangaVerz)
    8. Next
    9. Console.ReadLine()
    10. Catch UAEx As UnauthorizedAccessException
    11. Console.WriteLine(UAEx.Message)
    12. Catch PathEx As PathTooLongException
    13. Console.WriteLine(PathEx.Message)
    14. End Try
    15. End Sub


    Jetzt muss ich nur noch in die Unterverzeichnisse wechseln und dort die entsprechenden Datein umbennen.
    Diesbezüglich frage ich mit Sicherheit auch noch nach :)


    Gruss TODuke
    Ich werde mir Mühe geben das zu verstehen, allerdings ist meine Wissensgewinnung noch am Anfang. Ich hoffe das wird noch besser.

    Habe jetzt eine System.InvalidCastException bei folgender Zuweisung:

    strMangaName = Directory.GetCurrentDirectory(strMangaVerz)


    Tritt beim ersten Verzichnis auf "C:\Users\Matthias\Documents\17. Test\07 Ghost"

    Als Detail:
    "Ungültige Konvertierung von der Zeichenfolge {"C:\Users\Matthias\Documents\17. in Typ Integer."}

    Wie kann ich das ganze programmtechnisch sauber lösen?

    Gruss TODuke
    Ich bin deinem ersten Post in Teilen gefolgt und auch auf eine funktionsfähige Lösung gestosssen so das ich jetzt alle Verzeichnisse, Unterverzeichnisse und Dateien auflisten kann. Je nach Bedarf.

    Jetzt geht es mir darum alle Verzeichnisse zu durchsuchen und die Unterverzeichnisse nach einem festen Schema(Name und Nummer) umzubenennen, dabei bin ich halt auf o.g. Problem gestossen.
    Dafür habe ich noch keinen Ansatz gefunden, bzw. mir ist nicht klar warum eine Typkonvertierung durchgeführt wird von string zu string.
    nun, dieses ist ein freies land.

    aber so frei nun auch wieder nicht, dass du nicht downzuloaden brauchst, was ich uploade.

    (warn witz - bin grad in witzbold-Stimmung)
    Im ernst: denke schon, eine lauffähige solution zu öffnen und drin rumzufummeln, bringt ein verständnis schneller voran, als nur im browser auf den code zu gugge.
    Da hab ich ja Glück das du mir als der wichtigste Erfinder überhaupt soviel Freiheit zugestehst.
    Ansonsten teile ich deine Meinung schon.
    Jedoch würde ich gerne mein "Projekt" zuerst zu einem erfolgreichen Ende bringen.
    Bisher ging alles mit Bordmitteln und ohne Rekursion. Ich weiss allerdings das ich später noch auf eine oder mehrere Rekursionen zurückgreifen muss und dann führe ich mir die Lektion auch mit Ruhe zu Gemüte.
    Besten Dank soweit.

    Gruss TODuke
    8| hmm - ich verstehe meine Mitmenschen einfach nicht 8|

    TODuke schrieb:

    Jedoch würde ich gerne mein "Projekt" zuerst zu einem erfolgreichen Ende bringen.
    Bisher ging alles mit Bordmitteln und ohne Rekursion.
    weiter oben:
    Da bietet sich natürlich eine rekursive Funktion an.
    und
    Jetzt muss ich nur noch in die Unterverzeichnisse wechseln und dort die entsprechenden Datein umbennen.

    Also wie ich das sehe, kannst du dein Projekt nicht zu Ende bringen, bevor du das mitte Rekursion geschnackelt hast.

    Und ich mach ein Demo-Programm, und biete an:

    ErfinderDesRades schrieb:

    Kannst (sollteste vmtl.) natürlich Fragen dazu stellen.
    aber es interessiert nicht wirklich ?(