[GELÖST]mit QDir Ordner durchsuchen
-
Hey Leute,
folgendes Problem bei dem ich nicht weiter komme.
Ich bräuchte eine Funktion, bzw einen Code-Teil, der mir mit Hilfe von QDir alle Dateien in einem bestimmten Pfad in ne QStringList kopiert.
Das ist auch kein Problem, ich durchsuche den Pfad vom QDir einfach nach Dateien über QDir.entryList().
Mein Problem, der Benutzer gibt ja einen Pfad an, so in diesem Pfad, können ja jedoch nicht nur Dateien sein, sondern auch weitere Unterordner, diese können ja wieder weitere Unterordner erhalten.
Ich bekomme es einfach nicht hin einen Algrotithmus zu schreiben, der ab dem angegebenen Pfad, alle Ornder abwärts durchsucht und mir die Dateien in die QStringList kopiert.
Vll hätte da jemand mal nen kleinen Denkanstoß für mich oder eben Tipps.Danke schonmal
Gruß freeG
-
Das Stichwort hier ist Recursion.
Du schreibst ne Funktion mit Pfadangabe, prüfst beim durchlaufen der Dateien ob es sich um ein Verzeichnis handelt und rufst anschließend die Funktion nochmals mit dem neuen Pfad auf.
-
Rekursion - ja. Allerdings nur wenn man nicht weiß dass es den QDirIterator gibt
Mit dem Ding ist das ein 3-Zeiler.
-
l'abra d'or schrieb:
Rekursion - ja. Allerdings nur wenn man nicht weiß dass es den QDirIterator gibt
Mit dem Ding ist das ein 3-Zeiler.
Cool, den kannte ich jetzt noch nicht, aber gut zu Wissen.
-
Ja ich dachte au irgendwie an Rekursion, habs jedoch leider noch net hinbekommen, wusste aber au net dass es nen QDir Iterator gibt, les ich nochmal in der Doku nach
Vielen Dank für die Hilfe;-)
Gruß freeG
-
Mit dem QDirIterator ist es wirklich nur ein 3 Zeiler.
-
Sehr gut, werd mich jetzt mal dransetzen:D
Weil mit der Rekursion hat ich das Problem, wenn in nem Pfad mehr als 1 Ordner war, ich hätte ja dann irgendwie immer wieder zurückspringen müssen...versteht ihr;-)Gruß freeG
-
fr33g schrieb:
Sehr gut, werd mich jetzt mal dransetzen:D
Weil mit der Rekursion hat ich das Problem, wenn in nem Pfad mehr als 1 Ordner war, ich hätte ja dann irgendwie immer wieder zurückspringen müssen...versteht ihr;-)Gruß freeG
Ist doch kein Problem. Skizziert, ohne jetzt kompilierbaren Code zu produzieren (zu faul um jetzt die Doku zu konsultieren :p):
def recursiveAdd( StringList& fileList, Dir dir): for info in dir.fileInfoList: // 1 if info.isDir: recursiveAdd(fileList, info.path) // 2 else: fileList.append(info.path) // 3
- traversiert über alle Einträge.
- ruft diese Funktion auf, steigt dabei ins Directory ab (rekursiv). Wenn diese Funktion durch ist, landest du automatisch wieder in dieser Schleife, und springst zum nächsten Eintrag.
- Falls es kein dir (also ein file) ist -> anhängen
-
Ich hab nochmal ne kurze Frage zu dem QDirIterator.
Mit der next Funktion iteriere ich ja ein Verzeichnis weiter. Wie ist dass denn wenn mein angegebener Pfad über mehrere Unterverzeichnisse verfügt, iteriere ich dann mit next alle möglichen Verzeichnisse durch, oder muss ich mir dafür selber was basteln? Geht er also alle Ebenen durch?Ich hoffe ihr wisst was ich meine:D
Danke schonmal
Gruß freeG
-
fr33g schrieb:
Mit der next Funktion iteriere ich ja ein Verzeichnis weiter.
Nein! Nicht Verzeichnis, sondern Verzeichniseintrag. Das kann ne Datei sein, aber genauso ein Verzeichnis. Hast du denn die Doku überhaupt gelesen? Da ist doch gleich ein Beispiel mit rekursivem iterieren.
QDirIterator it("/etc", QDirIterator::Subdirectories); while (it.hasNext()) { qDebug() << it.next(); // /etc/. // /etc/.. // /etc/X11 // /etc/X11/fs // ... }
Und wenn du dir für Rekursion mit dem QDirIterator wieder was selber basteln müsstest hätte ich den ja gar nicht erwähnt.
-
Hey,
vielen Dank, ich stand volle Kanne auf dem Schlauch, hab das Beispiel in der Doku was du gepostet hast schon gesehen, weiß auch net, dachte das hilft mir net.
Aber habs mir jetzt nomal kurz angeguckt, mir Gedanken gemacht und es umgesetzt, und siehe da es funktioniert;-)Vielen Dank für die Hilfe
Gruß freeG