Jak mogę usunąć folder ze wszystkimi jego plikami/podkatalogami (usuwanie rekursywne) w C++?Usuń folder i wszystkie pliki/podkatalogi
Odpowiedz
Standardowy C++ nie zapewnia tego - będziesz musiał użyć specyficznego dla systemu operacyjnego kodu lub biblioteki międzyplatformowej, takiej jak Boost.
Możesz użyć boost::remove_all
z Boost.Filesystem.
Poważnie:
system("rm -rf /path/to/directory")
Może więcej co szukasz, ale UNIX specyficzny:
/* Implement system("rm -rf") */
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/syslimits.h>
#include <ftw.h>
/* Call unlink or rmdir on the path, as appropriate. */
int
rm(const char *path, const struct stat *s, int flag, struct FTW *f)
{
int status;
int (*rm_func)(const char *);
switch(flag) {
default: rm_func = unlink; break;
case FTW_DP: rm_func = rmdir;
}
if(status = rm_func(path), status != 0)
perror(path);
else
puts(path);
return status;
}
int
main(int argc, char **argv)
{
while(*++argv) {
if(nftw(*argv, rm, OPEN_MAX, FTW_DEPTH)) {
perror(*argv);
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
Zostało to odrzucone, ponieważ jest to C zamiast C++ (chociaż kompiluje się dobrze z g ++ -Wall -Wextra), lub ponieważ platforma downwizera nie ma nftw? Skomentuj, kiedy zagłosujesz, proszę! To jest solidny kod. –
Jak przenośne jest 'system (" rm -rf/path/to/directory ")'? Czy będzie działać na dowolnym systemie operacyjnym * nix? Oczywiście nie będzie działać w systemie Windows. –
Można użyć ftw()
, nftw()
, readdir()
, readdir_r()
przemierzać katalog i usuwanie plików rekurencyjnie.
Ale ponieważ ani ftw()
, nftw()
, readdir()
jest bezpieczny dla wątków, zalecam readdir_r()
zamiast tego, jeśli twój program działa w środowisku wielowątkowym.
Tylko jeden węzeł boczny: istnieje duplikat tego pytania, jeśli nie chcesz polegać na boostie, warto rzucić okiem na akceptowaną odpowiedź [there] (http://stackoverflow.com/a/2256974/1312382). – Aconcagua