C++ -> Dateien kopieren mit SHFileOperation...

Hi Jungs,
eventuell kann mir jemand helfen.. ich werde noch bekloppt heute :(

System: Win XP SP2
Sprache VC++

Code:
bool CInstallThread::CopySH(LPCTSTR pFromFolder, LPCTSTR pToFolder)
{
	//--- copy - routine  ---
	CString from = pFromFolder;
	CString to   = pToFolder;

	from += '\0';
	to	 += '\0';

	SHFILEOPSTRUCT fo;
	fo.fAnyOperationsAborted	= NULL;
	fo.hwnd						= NULL;
    fo.hNameMappings			= NULL;
    fo.lpszProgressTitle		= NULL;
	fo.wFunc					= FO_COPY;
	fo.pFrom					= from;
	fo.pTo						= to;
	fo.fFlags					= FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCONFIRMATION | FOF_SILENT;


	if( ::SHFileOperation(&fo) )
	{
		DWORD dw = GetLastError();//only for debugging
		return false;
	}
	
	return true;
}

mein Problem: es wird nix kopiert. GetLastError() gibt mir ERROR_INVALID_HANDLE zurück.
from und to sind jeweils die Dateipfade. Der to Pfad existiert noch nicht, soll silently angelegt werden.

Warum bekomm ich da nur ERROR_INVALID_HANDLE zurück? Wenn ich die Flags wegnehme, dann funzts, aber man muss halt alles bestätigen, was ich nicht möchte.

Jemand ne Ahnung? Hoffe die Infos reichen, wenn nicht einfach fragen ;)
 
Wenn die Flags das Problem sind, dann lass sie doch einfach weg.
Du kannst doch mit:
Code:
#include <direct.h>
...
_mkdir("C:\Neuer Ordner");
einen neuen Ordner erstellen. Ggf. musst du noch prüfen ob der Ordner schon existiert, aber dafür weis ich den Befehl grade nicht. Musst mal googeln. ^^
Dann musst du nur noch mit einer for-Schleife den Pfad aus dem "to" String isolieren und vi? la! Du brauchst die Flags nicht mehr. :)
 
ich hatte den Fehler übrigends gefunden...

wenn man im Struct diese Flags setzt:

Code:
FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCONFIRMATION | FOF_SILENT;

Dann muss man zwingend auch ein HWND angeben. Sonst bekommt man immer den o. g. Fehler.

Gruß,
Machine
 
Zurück
Oben