Probleme bei SHFileOperation mit MULTI-Destination
-
Hallo zusammen,
vielleicht kann mir von Euch einer weiterhelfen. Ich möchte gerne ein Verzeichnis in mehrere Netzlaufwerke kopieren, d.h. ein Quellverzeichnis und
mehrere Zielverzeichnisse. Das funkt. aber leider nicht, es wird immer nur das 1. angegebene Verzeichnis kopiert.
Kann mir vielleicht einer sagen, was ich falsch mache, oder ist es überhaupt so möglich???Hier noch mein Code:
int TDirCopy::CopyFiles(AnsiString quelle, TStrings *ziel) { char source[80], dest[DEST_LEN]; int erg = 0, index, len = 0, zeichen = 0; SHFILEOPSTRUCT sh; memset(source,0,80); memset(dest,0,DEST_LEN); //_____________________ Ziel _____________________ index = ziel->Count; for(int i = 0; i < index; i++) { strcpy(dest+len,ziel->Strings[i].c_str()); len = ziel->Strings[i].Length(); len++; zeichen = zeichen + len; } dest[zeichen] = NULL; //_____________________ Quelle ___________________ StrCopy(source,quelle.c_str()); len = strlen(source); source[len+1] = NULL; //________________________________________________ sh.hwnd = NULL; sh.fFlags = FOF_MULTIDESTFILES | FOF_SILENT; sh.wFunc = FO_COPY; sh.pFrom = source; sh.pTo = dest; sh.hNameMappings = NULL; sh.lpszProgressTitle = NULL; erg = SHFileOperation (&sh); if(!erg) { if(sh.fAnyOperationsAborted == TRUE) erg = 2; } return erg; }
Gruß
Timo
-
for(int i = 0; i < index; i++) { strcpy(dest+len,ziel->Strings[i].c_str()); len = ziel->Strings[i].Length(); len++; zeichen = zeichen + len; } dest[zeichen] = NULL;
Das sieht mir nicht ganz richtig aus
-
Funktioniert aber richtig!
Das setzt mir den String zusammen. Die einzelnen Strings sind mit einer \0 abgeschlossen und am Schluß kommt 2x \0. So wirds wenigstens in der Hilfe beschrieben, dass man den String so abschliessen muss.Vielleicht habt Ihr mir noch einen Tip???
-
aber du setzt deinen Pointer ja nicht weiter, oder? Wird da nicht immer wieder überschrieben
Vielleicht dest+Zeichen
-
Ja, ist mir auch gerade aufgefallen, hab das nur nicht gemerkt, da ich bis jetzt nur 2 Zielverzeichnisse eingegeben habe und da hats zufälligerweise funktioniert
.
Das mit dem Pointer verschieben hab ich drin, aber wg. dem funktioniert der Rest immer noch nicht, dass meine Daten nachher auf 2 Ziele kopiert werden.
Wird immer nur das 1. Ziel angenommen.
Vielleicht kannst Du mir da auch noch einen Tip geben!Timo
-
gib doch die Dateien o.ä. mal direkt an, damit wenigstens mal ausgeschlossen ist, dass das String-Array nicht korrekt ist
-
Hab ich auch schon gemacht, bringt genau denselben Effekt!
-
Ich hab gerade zufällig nochmal in der MSDN-Library gelesen:
FOF_MULTIDESTFILES
The pTo member specifies multiple destination files (one for each source file) rather than one directory where all source files are to be deposited.So wie ich das verstehe wird das nicht so klappen, wie du es dir erhofft hattest -> du müsstest für jeden Zielort die Funktion nochmals aufrufen
-
Ja, ich habs jetzt auch noch mit ein paar Kombinationen getestet und muss es wohl 2x aufrufen, trotzdem vielen Dank für die Hilfe!
Gruß
Timo