Eingegebene Datei löschen
-
Hallo
Ich möchte eine einen Datenamen durch cin eingeben und in einen string oder char speichern und dann die eingegebene Datei löschen ..
habe schon gehört das man mitremove()
Dateien löschen kann
aber nur die man voher im Code angegeben hat...crashjosh
-
remove() benötigt ganz klar den Namen der zu löschenden Datei - woher der Name kommt, ist da egal. Das heißt es ist kein Problem, den Namen einzugeben und dann als Parameter weiterzureichen:
string datei; getline(cin,datei); remove(datei.c_str());//remove stammt aus C-Zeiten und erwartet deshalb einen C-String
-
Danke für die schnelle Antwort!!
Gibt es denn auch ein für C++ gebräuchlicheren Code?
-
Was meinst du denn mit "gebräuchlicher"? C++ hat keine Ersatzfunktion für remove() definiert, aber du kannst dort problemlos die aus C geerbte Funktion nutzen. Boost::Filesystem bietet eventuell etwas in der Richtung, aber wenn es dir nur ums Löschen geht, ist das wohl übertrieben.
-
Ok gibt die Funtkion auch die Möglichkeit alle Dateien(egal welchen Names)
in einem Bestimmten Ordner zu löschen z.B. dem Papierkorb (aus rein demonstrative Zwecken) ?
-
Wenn du plattformübergreifend programmieren möchtest, wäre wohl das von CStoll abgesprochene boost::filesystem einen nähereren Blick wert.
Ansonten müsstest du den Ordner mit os-spezifischen Methoden einlesen und die Funktion für jede gefundene Datei aufrufen.
-
Nein eigentlich nur unter Windows :p
-
ShFileOperation wäre dann genau das, was du suchst.
Oder eben wie geschrieben der Weg über FindFirst/NextFile und einen Mechanismus, der bspw. hier beschrieben ist.
Edit: Bei letzterem Link wird ShFileOperation gekapselt, sollte also einsteigerfreundlicher sein.
-
Ok als Anfänger erstmal schwierig aber ich werds versuchen auch wenn die Beispiele
winapi sind...
-
void ShowFiles(const char *path) { WIN32_FIND_DATA fileData; HANDLE hFind = FindFirstFile(path, &fileData); if (hFind != INVALID_HANDLE_VALUE) { do { printf("%s\n", fileData.cFileName); } while (FindNextFile(hFind, &fileData)); } } int main() { ShowFiles("C:\\*"); return 0; }
Vielleicht hilft dir das ja.
-
Danke !!!
Hat mitShowFiles("C:\\Ordner\\Ordner\\*");
geklappt .
-
if (hFind != INVALID_HANDLE_VALUE) { do { printf("%s\n", fileData.cFileName); remove(fileData.cFileName); } while (FindNextFile(hFind, &fileData)); }
habs jetzt mal damit vesucht Compiler spuckt keine Fehler aus
aber es zeigt auch keine Wirkung...
-
FindFirstFile etc. findet auch Ordner.
Guck dir mal
http://msdn.microsoft.com/en-us/library/aa365740(v=vs.85).aspx
bzw.
http://msdn.microsoft.com/en-us/library/gg258117(v=vs.85).aspx
an. Und dann füge z.B. ein:if (fileData.dwFileAttributes & ~FILE_ATTRIBUTE_DIRECTORY) printf()..
Edit:
Bzw. remove() "wirkt" auf deine Umgebung.
http://msdn.microsoft.com/en-us/library/aa365530(v=vs.85).aspx
-
Danke aber ich bin sehr warscheinlich zu doof dafür..
Also da remove ja umgebungsbedingt ist wie lösche ich die gefundenen Dateien?
-
void DelAllFilesInDirectory(const char *path, const char *files) { SetCurrentDirectory(path); WIN32_FIND_DATA fileData; HANDLE hFind = FindFirstFile(files, &fileData); if (hFind != INVALID_HANDLE_VALUE) { do { if (fileData.dwFileAttributes & ~FILE_ATTRIBUTE_DIRECTORY) { printf("%s\n", fileData.cFileName); remove(fileData.cFileName); } } while (FindNextFile(hFind, &fileData)); } } int main() { DelAllFilesInDirectory("E:\\ordner", "*.txt"); return 0; }
Was bitte war an "SetCurrentDirectory" nicht zu verstehen?
-
Sorry habe das scho kapiert aber SetCurrentDirectory in der do-Schleife eingesetzt ...Danke!
Und was ist der Sinn von
if (fileData.dwFileAttributes & ~FILE_ATTRIBUTE_DIRECTORY) {
Bin halt 'n Anfänger
-
Kurz: Das guckt ob das gefundene Handle überhaupt eine Datei ist.
Lang: Dualsystem
Die WinAPI setzt also irgendwelche bits in dwFileAttributes, um uns zu sagen was wir das überhaupt gefunden haben. Der Wert von FILE_ATTRIBUTE_DIRECTORY ist 0x10 (=16) und setzt genau ein bit. (Windows 7 Taschenrechner kann das anzeigen. :))
Wenn wir wissen wollten, ob das bit gesetzt ist, würden wir
if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
fragen. Siehe auch: Binäre Operatoren.~x ist das Komplement von x, also aus binär 10010 würde 01101.
Mir fällt aber gerade auf, dass
if (!(fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
wohl sicherer wäre.
-
Aso... ^^
Meine letzte Frage da jetzt der Paramter "files" übergeben wurde , gibt es eine möglichkeit keine Bestimmten DateiendungenDelFilesInDirectory ("C:\\*" , "*.txt");
zu nehmen sondern alle ?
-
crashjosh schrieb:
Meine letzte Frage da jetzt der Paramter "files" übergeben wurde , gibt es eine möglichkeit keine Bestimmten Dateiendungen
DelFilesInDirectory ("C:\\*" , "*.txt");
zu nehmen sondern alle ?
DelFilesInDirectory( "C:\\" , "*" );
-
Danke so fertig :p