C/C++: Ordner löschen - Wie geht das
-
Probiers mal mit boost::filesystem.
Ist auch portabel
-
Und wenn er in C programmiert, überhaupt nicht daran interessiert ist, portablen Code zu erzeugen oder sich für eine solche Minifunktionalität nicht boost herunterladen und darin einarbeiten will?
In den MSDN-Artikeln steht (wie eigentlich immer) alles Nötige, um die Funktionen nutzen zu können. Woran hapert es denn?
Denk daran, dass der Verzeichnisname doppelt nullterminiert werden muss, nachzulesen bei der Beschreibung der Struktur.
-
Im Titel steht aber C++.
Und da die meisten C++-Anwender durchaus Boost auf der Platte haben, ist es durchaus eine Option. Warum mit C rumquälen wenn es eine saubere, portable C++ Lösung gibt.
Ich finde ein
boost::filesystem::remove_all("C:\testdir");
deutlich angenehmer als WinAPI-Gefrickel, das nicht sein müsste.
-
Ungetestetes Beispiel:
SHFILEOPSTRUCT sop; ZeroMemory(&sop,sizeof(SHFILEOPSTRUCT)); // Erstmal alle sop-Member leeren sop.wFunc=FO_DELETE; // Wir wollen löschen sop.pFrom=TEXT("c:\\test\\delme\0"); // \0 hinten dran ist wichtig! SHFileOperation(&sop);
-
Bin hoffentlich nicht zu spät dran. Wollte nur sagen, dass die konservative Variante gar nicht so schwer zu implementieren ist:
void DeleteDir (char *pszDir) { WIN32_FIND_DATA tData = {0}; char pszFile[MAX_PATH] = {0}; char pszMask[MAX_PATH] = {0}; HANDLE hFind = NULL; // Suchmaske generieren ::StringCbPrintf (pszMask, sizeof (pszMask), "%s\\*.*", pszDir); // Dateien löschen hFind = ::FindFirstFile (pszMask, &tData); if (hFind != INVALID_HANDLE_VALUE) { do { if (!(tData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { ::StringCbPrintf (pszFile, sizeof (pszFile), "%s\\%s", pszDir, tData.cFileName); ::DeleteFile (pszFile); } } while (::FindNextFile (hFind, &tData)); // Suche beenden ::FindClose (hFind); } // Verzeichnis löschen ::RemoveDirectory (pszDir); }
-
Toll - hoffen wir, daß das Verzeichnis nicht weitere Verzeichnisse enthält ...
-
Noch ein sehr simpler Vorschlag: Eine Batchdatei killfolder.bat erstellen und diese mit system("killfolder.bat"); aufrufen. Man braucht nur die OS-Befehle aus command.com. Sollte man zuvor von der Eingabeaufforderung mit einem Dummy-Ordner ausprobieren!
-
Vielen Dank. Das war genau das, was ich gesucht habe.
Mfg
Alpha_Coder
-
Das ist nicht simpel. Simpel ist die Benutzung von SHFileOperations, eine API-Funktion, die genau für diese Zwecke da ist.
-
Belli schrieb:
Das ist nicht simpel. Simpel ist die Benutzung von SHFileOperations, eine API-Funktion, die genau für diese Zwecke da ist.