ganzen ordner löschen
-
hallo, ich würde gerne ein programm schreiben,
welches den inhalt eines verzeichnisses ausliest
diesen inhalt mit einer while schleife löscht
und dann erst den ordner selbst löscht(muss nicht unbedingt sein)hab es schon mit readdir und remove versucht,
komme aber damit irgenwie nicht zurechtkönnte mir jemand ein beispielprogramm geben?
MFG
uncannysnake
-
Welches Betriebssystem? Und ohne etwas mehr Eigeninitiative wird es erfahrungsgemäß auch schwer, jemanden zu einem "Beispielprogramm" (Forensprech für: Mach meine Arbeit!) zu überreden.
-
Windoof:
SHFileOperation( ... )
angucken
-
Swordfish schrieb:
Windoof:
SHFileOperation( ... )
anguckenWieso keine POSIX-Empfehlung?
-
Weil ich wett', dass op es für Windoof will ...
-
Der Hinweis auf readdir und remove lässt anderes vermuten.
Ich denke mir das etwa so:
#include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <unistd.h> #include <stdio.h> #include <string.h> void rmtree(char const *path) { DIR *dir; struct dirent *file; dir = opendir(path); if(dir == NULL) return; while(NULL != (file = readdir(dir))) { char fullpath[NAME_MAX + 1]; struct stat st_buf; if(strcmp(file->d_name, "." ) == 0 || strcmp(file->d_name, "..") == 0) { continue; } snprintf(fullpath, NAME_MAX + 1, "%s/%s", path, file->d_name); if(0 == lstat(fullpath, &st_buf) && S_ISDIR(st_buf.st_mode)) { rmtree(fullpath); } else { remove(fullpath); } } closedir(dir); remove(path); }
Bitte nur mit Verzeichnissen ausprobieren, die du nicht mehr brauchst! Eine sinnvolle Fehlerbehandlung darfst du dir selbst ausdenken.
-
Nachtrag: Es gäb da noch was einfacheres:
#define _XOPEN_SOURCE 500 #include <ftw.h> #include <stdio.h> int remove_file(char const *fpath, struct stat const *sb, int typeflag, struct FTW *ftwbuf) { /* Compilerwarnungen über unbenutzte Parameter unterdrücken */ (void) sb; (void) typeflag; (void) ftwbuf; remove(fpath); return 0; } void rmtree(char const *path) { nftw(path, remove_file, 32, FTW_DEPTH | FTW_PHYS); }
-
vielen dank,
habe es nicht angegeben,
da ich ich das programm auf allen meinen Betriebssystemen
zum laufen bringen will...danke seldon, werde es gleich ausprobieren und schauen,
ob ich es an meine eigenen, speziellen bedürfnissse anpassen kannMFG
uncannysnake
-
uncannysnake schrieb:
vielen dank,
habe es nicht angegeben,
da ich ich das programm auf allen meinen Betriebssystemen
zum laufen bringen will...Hmm, schwierig. Da musst du dir vielleicht eine Wrapperfunktion schreiben, die dann intern mit viel ifdef & Co den passenden Code erzeugt. Oder eine fertige Bibliothek nehmen, die das schon für einen erledigt hat. Fallt mir für C spontan nichts ein. Falls C++ ok ist, könnte man boost::filesystem dafür nehmen.
-