kopieren von Dateien und Verzeichnisse mit SHFILEOPSTRUCT
-
Hallo,
habe folgenden Code aus dem Forum (Happy Builder) in mein Projekt eingebunden.#include <ShellApi.hpp> void __fastcall ExecuteOp(AnsiString From , AnsiString Dest, int IdOp) { TSHFileOpStruct *ShFile = new TSHFileOpStruct(); From = ExpandFileName(From); Dest = ExpandFileName(Dest); char zFrom[MAX_PATH]; char zDest[MAX_PATH]; for(int i=0; i<MAX_PATH; ++i ) { zFrom[i] = '\0'; zDest[i] = '\0'; } strcpy(zFrom, From.c_str()); strcpy(zDest, Dest.c_str()); ShFile->hwnd = GetActiveWindow(); ShFile->wFunc = IdOp; ShFile->pFrom = zFrom; ShFile->pTo = zDest; if (IdOp != FO_DELETE) ShFile->fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; else ShFile->fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; bool result = SHFileOperation(ShFile); ShFile->fAnyOperationsAborted; delete ShFile; } void __fastcall CopyFiles( const AnsiString From, const AnsiString Dest) { ExecuteOp(From,Dest, FO_COPY); } void __fastcall DeleteFiles( const AnsiString Files ) { ExecuteOp(Files,"", FO_DELETE); } void __fastcall MoveFiles( const AnsiString From, const AnsiString Dest) { ExecuteOp(From,Dest, FO_RENAME); }Funktionier einwandfrei. Welche Parameter muß ich zum kopieren übergeben, das
a) alle kopiert werden
b) nur die ältere ?
gruß Siegfried
[ 27.08.2006: Beitrag editiert von: Beppo ]
Möchte noch zusätzlich ein Frage stellen. Wenn ich die > QUELLE < direkt auf z.B. > C:\ < einstelle, bekomme ich eine Fehlermeldung. Muß ich hier zuerst in ein paar Zeilen die Verzeichnisse ermitteln, oder giebt es eine andere Möglichkeit ?
Gruß Siegfried
-
Um alle Dateien zu kopieren muss der Aufruf wie folgt aussehen:
CopyFiles("C:\\test\\*.*", "C:\\")C:\ ist falsch, richtig ist: C:\\
Siehe auch hier: http://www.bytesandmore.de/rad/cpp/snipp/sc01005.phpEinen einfachen Weg ältere Dateien zu löschen gibt es so gesehen nicht, allerdings haben sich darüber auch schon andere Leute gedanken gemacht:
http://www.bytesandmore.de/rad/cpp/snipp/sc01002.phphf
-
Hallo,
Wenn ich die > QUELLE < direkt auf z.B. > C:\. < einstelle, ist das Problem mit einer Partition gelöst.
Das andere muß ich überarbeiten.
Gruß Siegfried
-
Hallo,
Inzwischen habe ich folgendes herausbekommen. Wenn ich in das Zielverzeichnis, vorausgesetzt dies existeiert nicht (z.B. D:\Ordner1) kopieren möchte, muß ich vor der Kopier-Routiene diesen erstellen. Sollte das Ziel aus mehreren Verzeichnise bestehen (D:\Ordner1\Ordner2\Ordner3), muß ich diese all einzeln in einer Schleife anlegen. Gibt es eine andere Möglichkeit ?Gruß Siegfried

-
Hallo,
Du könntest mit ForceDirectories() den kompletten Pfad vorher erstellen.
-
Hallo,
wieder etwas gelernt!
Danke für die schnelle Info
Gruß Siegfried
