Verzeichnis aufrufen und Dateien löschen
-
Hallo,
ich bin ein C++ Einsteiger und habe folgendes Problem:Ich muss ein Tool in C++ schreiben, das 2 parameter enthalten soll. Das eine soll einen Verzeichnispfad angeben, der allerdings nicht im Code stehen, sondern zB von einem Programm, in dem man dieses Tool verwendet, zugewiesen werden soll, das andere parameter soll true oder false enthalten. Die Aufgabe dieses Tools ist es, alle Dateien, die sich in diesem Verzeichnis und deren Unterverzeichnisse befinden, zu löschen. Nach einer Prüfung des 2. Parameters soll es bei True die unterverzeichnissse ebenfalls löschen. Allerdings komm ich damit momentan überhaupt nicht klar. Ich würde mich über Lösungsvorschläge freuen, am besten kommentiert.
-
C++ hat keine Funktion zum löschen von Dateien oder Verzeichnissen. Du musst dann betriebssystem-spezifische Funktionen verwenden. Also welches Betriebssystem soll es denn sein? Wenn du die Funktionen hast, tuts meistens eine Rekursion. Dazu sollte es aber genug Infos im Internet finden.
-
Danke schonmal.
Ich benutze XP, hab aber kein Plan, wie ich an diese Funktion komme.
-
-
Frag einfach mal im WinAPI Forum nach. Dir sollte
SHFileOperation helfen.
-
Boost::FileSystem:
#include <boost/filesystem.hpp> void DeleteRootDirectoy(const std::string &Directory, const bool &DeleteAllSubFolders) { boost::filesystem::path Root(Directory); if(DeleteAllSubFolders) boost::filesystem::remove(Directory); }Den Rest schaffst du sicher selber, wir glauben an dich!
-
Kóyaánasqatsi schrieb:
Boost::FileSystem:
// code der vermutlich die komplette Festplatte löscht ...Ich hoffe das ist nicht genauso fies wie einem Linux noob ein
// Don't do THIS ... unless you want to risk your sanity sudo rm -rf /*in der Console zu raten ... Ansonsten braucht er wohl ein neues System ... und du gehörst zu den Leuten die Nichtschwimmer ins Wasser schubsen ...
-
padreigh schrieb:
Kóyaánasqatsi schrieb:
Boost::FileSystem:
// code der vermutlich die komplette Festplatte löscht ...Ich hoffe das ist nicht genauso fies wie einem Linux noob ein //... blablabla müll
Komplette Festplatte, ahjo, man merkt du hast die Ahnung. Unterstell mir mal nichts, ich habe bewusst nicht noch DeleteRootDirectory("C:/", true); dabei geschrieben.
-
Koyakarpfen schrieb:
const bool &DeleteAllSubFolders
const bool&...
Man muss nicht alles als konstante Referenz übergeben.
-
Wieso, ist doch ok

-
Kóyaánasqatsi schrieb:
Wieso, ist doch ok

Ok im Sinne das man es so machen kann, ja. Aber konstante Referenzen macht man ja, um bei größeren Objekten eine Kopie zu vermeiden. Da ein
boolaber i.d.R. nur 1 Byte groß ist und Referenzen üblicherweise intern als Pointer mit 4 bzw. 8 Byte übergeben werden, hast du da genau das Gegenteil erreicht.