SHFileOperation zum Kopieren von Verzeichnissen liefert als Rückgabewert manchmal 2



  • In einem MFC-Projekt muss ich zur Datensicherung bei Konfigurationsänderungen die Konfigurationsdateien sichern. Diese befinden sich in einem Verzeichnis unterhalb C:\ProgramData<Appname> und sind auf insgesamt 5 Dateien in 3 Unterverzeichnissen verteilt. Nun ist der Plan alle Dateien nebst Verzeichnisstruktur zu sichern. Ich verwende folgenden Code:

    int CopyFilesAndFolders(CString strQuelle, CString strZiel)
    {
    	CString OldPath = strQuelle;
    	CString NewPath = strZiel;
    
    	NewPath += "\\\0\0";
    	OldPath += "\\*\0\0";
    
    	SHFILEOPSTRUCT copyFolder;
    	ZeroMemory(&copyFolder, sizeof(SHFILEOPSTRUCT));
    	copyFolder.hwnd = ::GetActiveWindow();
    	copyFolder.wFunc = FO_COPY;
    	copyFolder.pFrom = (LPCTSTR)OldPath;
    	copyFolder.pTo = (LPCTSTR)NewPath;
    	copyFolder.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
    
    	return SHFileOperation(&copyFolder);
    }
    

    Unter Win7 lief das soweit ganz gut. Jetzt sollen die Programme unter Win10 laufen und hin und wieder (Chance ist 50/50) liefert die Funktion den Wert 2 (Datei nicht vorhanden) zurück. In diesem Fall wird nur die Verzeichnisstruktur im Zielpfad angelegt und die Dateien fehlen. Die Dateien sind aber im Quellpfad existent. Die Übergabeparameter beinhalten direkte Pfadangaben (C:\ProgramData<Appname>\Einstellungen.... ). Was mache ich hier falsch. Wenn die Funktion fehlerfrei ausgeführt wird dann ist im Zielpfad auch alles sauber kopiert. Das Problem scheint öfters aufzutauchen. Jedoch hat meine Recherche via Google bisher nichts brauchbares ergeben.


Log in to reply