Dateien aus mehreren Ordnern in einen Zielordner kopieren
-
Hallo,
kurz zu der Aufgabe meines Programms: Ich möchte ein Programm schreiben, dass mir jpg-Dateien, die in unterschiedlichen Unterverzeichnissen liegen, in ein einziges Zielverzeichnis kopiert. Dabei sieht die Ordnerstruktur der Quellverzeichnisse folgendermaßen aus:
..\ImageLibrary\<Datum1>\..
..\ImageLibrary\<Datum2>\..
...
..\ImageLibrary\<DatumX>\..Die zu kopiereneden jpg-Dateien liegen in den <Datum> Ordnern. Jeder <Datum> Ordner hat zudem noch Unterverzeichnisse, diese sind aber für mein Programm unwichtig!
Das kopieren der Dateien wäre ja kein Problem, allerdings weiß ich nicht wie ich die Pfade der <Datum> Ordner einlesen kann? Gibt es z.B. eine Möglichkeit alle Pfade der Unterverzeichnisse des Ordners ImageLibrary in ein Arry zu schreiben?? Oder kann ich alle jpg-Dateien aus dem ImageLibrary Verzeichnisse mitsamt seiner Unterverzeichnisse kopieren? Das waren jetzt nur mal zwei Ideen von mir allerdings hab ich keine Ahnung ob die Umsetzung überhaupt möglich ist. Welche Vorschläge habt ihr noch für mein Problem?
Könnt ich vielleicht auch ein Dialog Fenster machen mit dem ich mehrere Ordner auswählen kann?Ich hoffe, meine Beschreibung war ausführlich genug. Ansonsten fragt einfach nochmal nach, wenn etwas unklar ist... Ist immer etwas schwierig zu beschreiben, wenn man nicht selbst davor sitzt
Gruß,
freddie
-
Könnte mit CFileFind klappen:
- ein CFileFind-Objekt erstellen
- mit diesem Objekt FindFile mit dem Pfad zu deinem ImageLibrary-Ordner + . aufrufen
- solange FindNextFile aufrufen, bis diese Funktion Null zurück gibt
- jede gefundene Datei mit IsDirectory überprüfen. Wenn es ein Verzeichnis (und keine Datei) ist, das gleiche noch mal in dem Unterordner machen mit dem Unterschied, dass jetzt nur die Dateien (und nicht die Verzeichnisse) beachtet werden
-
Danke isabeau! Werds mal versuchen und mich bei Problemen nochmal melden... also garantiert nochmal!
-
So, jetzt meld ich mich tatsächlich nochmal! Ich hab jetzt das Programm geschrieben, allerdings werden die Dateien aus den Unterverzeichnissen nicht kopiert. Was muss ich denn an meinem Code noch ändern?
void CCopyToolDlg::OnCopyFiles() { CFileFind file; file.FindFile("D:\\Quelle\\*.*", 0); while (file.FindNextFile()) { if (file.IsDirectory()) { while (file.FindNextFile()) { if (!file.IsDirectory()) { CString cs_SourceFile = file.GetFilePath(); CString cs_DestinationFile = "D:\\Ziel\\"; cs_DestinationFile += file.GetFileName(); CopyFile(cs_SourceFile, cs_DestinationFile, FALSE); } } } } }
-
Das liegt daran, dass man nicht zweimal while(file.FindNextFile()) aufrufen darf ! Das musst du dann rekursiv lösen ! Suche am besten im Board unter dem Stichwort CFileFind und rekursiv. Dort findest du viele Lösungsmöglichkeiten !
Gruß
:: NoName ::
-
:: NoName :: schrieb:
Das musst du dann rekursiv lösen !
Wenn das rekursiv gemacht wird, rennt er aber auch in die Unterordner rein, die er gar nicht haben will:
freddie_jr schrieb:
Jeder <Datum> Ordner hat zudem noch Unterverzeichnisse, diese sind aber für mein Programm unwichtig!
Ich denke eher an sowas:
(ACHTUNG! NICHT GETESTET!)void CCopyToolDlg::OnCopyFiles() { CFileFind file; file.FindFile("D:\\Quelle\\*.*", 0); while (file.FindNextFile()) { if (file.IsDirectory()) { // es ist ein Ordner CFileFind secondFile; secondFile.FindFile(file.GetFilePath() + "\\*.*", 0); while (secondFile.FindNextFile()) { if (!secondFile.IsDirectory()) { // hier dann wieder die Dateien kopieren } } } else { // es ist eine Datei CString cs_SourceFile = file.GetFilePath(); CString cs_DestinationFile = "D:\\Ziel\\"; cs_DestinationFile += file.GetFileName(); CopyFile(cs_SourceFile, cs_DestinationFile, FALSE); } } }
-
Aber er hat doch gesagt:
...allerdings werden die Dateien aus den Unterverzeichnissen nicht kopiert. Was muss ich denn an meinem Code noch ändern?
das sagt mir doch das er die unterverzeichnisse mit durchsuchen möchte !? Oder habe ich das falsch verstanden !?
Gruß
:: NoName ::
-
:: NoName :: schrieb:
Oder habe ich das falsch verstanden !?
Keine Ahnung, entweder du oder ich oder beide. Warten wir es ab...
-
So, jetzt meld ich mal wieder zu Worte und löse eure Rätselei
Die rekursive Lösung ist in meinem Fall nicht interessant, weil ich tatsächlich nur eine Verzeichnisebene tiefer nach den jpg-Dateien suchen möchte. Alle weiteren Unterverzeichnisse sind belanglos. Das Programm funktioniert jetzt auch einwandfrei dank Isabeaus Hilfe.
Also danke nochmal euch beiden für eure Unterstützung!!