Eingegebene Datei löschen
-
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