SHFileOperation Problem

FSA

Erfahrenes Mitglied
Hallo
Ich Lösche einen Ordner mit SHFileOperation. Klappt auch :D
Nun meine Frage wenn ich jetzt im Ordner bin der Gelöscht werden soll und dann den Ordner Lösche, mich aber noch drinne befinde, wird er nicht gelöscht! Geht das auch irgendwie dass er gelöscht wird?
Danke
 
Hi.

Wenn Dateien (Verzeichnisse) noch geöffnet sind, können sie nicht gelöscht werden.

Du könntest die MoveFileEx Funktion verwenden um die Datei(en) beim nächsten Reboot zu löschen.

Gruß
 
Ok danke hat geklappt allerdings noch eine Frage:
Mit Folgendem Code setzte ich einen Pfad zusammen:
C++:
string sDelUnMusic;
	sDelUnMusic = m_sIbo;
	sDelUnMusic += "\\Unpacked";
	LPCSTR DelPath = sDelUnMusic.c_str();
In m_sIbo steht "C:\\Users\\MYNAME\\Documents\\Test"
Wenn ich nun Den ordner Unpacked löschen will mit Folgendem Code:
C++:
SHFILEOPSTRUCT sh;  
	sh.hwnd = NULL;  
	sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
	sh.wFunc = FO_DELETE;                
	sh.pFrom = DelPath ;
	sh.pTo = NULL;
	sh.hNameMappings = NULL;
	sh.lpszProgressTitle = NULL; 
	SHFileOperation (&sh);
Passiert nichts der Ordner ist noch da. Aber wenn ich satt DelPath einfach "HierderPfad" hinschreibe ( hier der Pfad ist der Komplette Pfad war zu Fual den jetzt zu schreiben) Dann wird der Ordner gelöscht!
Warum?
Danke
 
Zuletzt bearbeitet von einem Moderator:
Versuch's mal so:
C++:
LPCSTR DelPath;
strcpy(DelPath,sDelUnMusic.c_str());
und setz mal breakpoints und überprüfe den Pfad.

Gruss
cwriter
 
Hallo MSVCplusplus,

in der MSDN steht bei der Beschreibung zu 'pFrom' und 'pTo':
This string must be double-null terminated.

Du musst also an das Ende des Strings noch zwei Nullzeichen basteln, vielleicht so:
C++:
string sDelUnMusic;
sDelUnMusic = m_sIbo;
sDelUnMusic += "\\Unpacked";

char* buffer = new char[sDelUnMusic.size() + 2];
strcpy(buffer, sDelUnMusic.c_str());
memset(buffer + sDelUnMusic.size(), 0, 2);

SHFILEOPSTRUCT sh;  
sh.hwnd = NULL;  
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.wFunc = FO_DELETE;                
sh.pFrom = buffer ;
sh.pTo = NULL;
sh.hNameMappings = NULL;
sh.lpszProgressTitle = NULL; 
SHFileOperation (&sh);

delete [] buffer;
Gruß
MCoder
 
Danke für die Hilfe ich werde es morgen mal testen weil ich den Rechner leider immoment nicht zur verfügung habe bin am anderen Rechner sry.
MfG
 
Zurück