Probleme beim Löschen von Dateien und Directories

UncleBob

Mitglied
Für das was ich vorhabe muss ich ein directory komplett löschen, einen anderen umbenennen dass er so heisst wie der gelöschte vorhin geheissen hat, und dann einen neuen erstellen der so heisst wie der letztere vorher geheissen hat, un dann gehts munter im Kreis.

So jedenfalls die Theorie. Leider scheint mein Programm partout nichts löchen zu wollen, weder Dateien noch DIrectories. Hier ist mein code:

Code:
	HANDLE DelFileHndl;
	WIN32_FIND_DATA DelFile;
	
	DelFileHndl = FindFirstFile("config/OGalaxySystems/CurSystem", &DelFile);
	remove(DelFile.cFileName);
	bool deleting = true;
	while (deleting)
	{
		if (FindNextFile(DelFileHndl, &DelFile))
			remove(DelFile.cFileName);
		else
			deleting = false;
	}
	bool checkstuff = true;
	checkstuff = RemoveDirectory("Config/OGalaxySystems/CurSystem");
	rename("Config/OGalaxySystems/TargetSystem","config/OGalaxySystems/CurSystem");
	checkstuff = CreateDirectory("Config/OGalaxySystems/TargetSystem", NULL);

Wie gesagt, weder werden die files in dem directory gelöscht, noch das directory selbst (auch nicht wenn ich es vorher selbst lehre) und natürlich funktioniert dann das umbenennen auch nicht. Was könnte hier flasch laufen?
 
Hallo UncleBob,

hast du mal überprüft, ob die Dateien überhaupt gefunden werden? Relative Pfade sind in da manchmal etwas problematisch. Außerdem musst du noch testen, ob es sich um eine Datei oder ein Verzeichnis handelt. Es werden beim Suchlauf nämlich mindestens noch die Dot-Verzeichnisse ( "./" und "../" ) gefunden, die du so nicht löschen kannst.

Gruß
MCoder
 
Zugriffsrechte und Dateiatribute dürften nicht das Problem sein, wurden die Dateien doch vom Programm selbt erstellt.

Wie auch immer, ich bin ein bisschen weiter. die Schleife zum löschen der Dateien funktioniert jetzt gut (danke für den Tip mit dem Verzeichnisse prüfen. das Hauptproblem war aber dass mein Pfad nicht mit \\* endete und somit die Funktion gar nicht wusste nach welchen dateien sie suchen soll).

Das leere Verzeichniss wird anschliessend aber immer noch nicht gelöscht :(

So sieht der code mitlerweile aus:

Code:
	HANDLE DelFileHndl;
	WIN32_FIND_DATA DelFile;
	std::string DeleteThisFile;


	
	DelFileHndl = FindFirstFile("Config/OGalaxySystems/CurSystem\\*", &DelFile);
	DeleteThisFile = "Config/OGalaxySystems/CurSystem/";
	DeleteThisFile += DelFile.cFileName;
	if (DelFile.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
		remove(DeleteThisFile.data());
	bool deleting = true;
	while (deleting)
	{
		if (FindNextFile(DelFileHndl, &DelFile))
		{
			DeleteThisFile = "Config/OGalaxySystems/CurSystem/";
			DeleteThisFile += DelFile.cFileName;
			if (DelFile.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
				remove(DeleteThisFile.data());
		}
		else
			deleting = false;
	}


 	bool checkstuff = true;
	checkstuff = RemoveDirectory("Config/OGalaxySystems/CurSystem");
	rename("Config/OGalaxySystems/TargetSystem","config/OGalaxySystems/CurSystem");
	checkstuff = CreateDirectory("Config/OGalaxySystems/TargetSystem", NULL);

Ich habe nun eine errorabfrage eingebaut, und der compiler sagt mir dass eine Sharing violation (32) vorliegt... Nur, das Verzeichniss wird von keiner Anwendung benutzt, und bei den Eigenschaften ist auch nirgends ein häkchen..

Edit: Ach, die Dummheit. Ich habe vergessen den FileHandle zu schliessen! funktioniert jetzt alles wunderbar, vielen Dank für die Hilfe! :)
 
Zuletzt bearbeitet:
Zurück