Frage zu SHFILEOPSTRUCT
-
folgender Code:
SHFILEOPSTRUCT ShFile; 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 = FO_COPY; ShFile.pFrom = zFrom; ShFile.pTo = zDest; ShFile.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; bool result = SHFileOperation( &ShFile ); ShFile.fAnyOperationsAborted;
funktioniert auf meinem Rechner( Win7 ) so wie er soll. Wenn ich die EXE allerdings auf meinem 2. Rechner( Win XP ) ausführe, kommt der Fehler 'Datei kann nicht kopiert werden. die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden'
Woran kann das liegen?
Ich versuche und versuche, aber alles bleibt wie oben beschrieben?!grüssle
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Der String in pFrom u pTo müssen doppelt NULL-terminiert sein.
Die for-Schleife kann gelöscht werden. Schreibe stattdessen lieberZeroMemory(zFrom,sizeof(zFrom));
um sicherzustellen, dass es doppelt NULL-terminiert ist:
zFrom[lstrlen(zFrom)+1] = '\0'; zDest[lstrlen(zDest)+1] = '\0';
ist nicht schön, aber funktioniert. Wenn Du das machst kannst Du Dir das ZeroMemory() sparen.
-
Doku lesen Es steht so fett drin dass man es eigentlich nicht übersehen kann oder?
http://msdn.microsoft.com/en-us/library/bb759795(VS.85).aspxpFrom
LPCTSTR
Note This string must be double-null terminated.
A pointer to one or more source file names. These names should be fully-qualified paths to prevent unexpected results.Standard MS-DOS wildcard characters, such as "*", are permitted only in the file-name position. Using a wildcard character elsewhere in the string will lead to unpredictable results.
Although this member is declared as a single null-terminated string, it is actually a buffer that can hold multiple null-delimited file names. Each file name is terminated by a single NULL character. The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.
-
Das Problem war der abschließende '\'. Win XP bringt einen Fehler wenn vorhanden, Win 7 ist es egal ob er da ist oder nicht
grüssle
-
Smitty schrieb:
Das Problem war der abschließende '\'. Win XP bringt einen Fehler wenn vorhanden, Win 7 ist es egal ob er da ist oder nicht
Nein! Dem ist es auch nicht egal, aber durch Zufall ist der Speicher an der Stelle evtl. 0 gewesen und das hat bei dieser Maschine dazu geführt das es geklappt hat...