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.
- 1. @ folder i + folder
- 2. Usuń wszystkie uprawnienia katalogowe
- 3. Jak monitorować folder zawierający wszystkie podfoldery i pliki?
- 4. Usuń wszystkie zer z tablicy
- 5. Usuń wszystkie w konsoli szyn
- 6. Usuń wszystkie dopełnienie i stół margines HTML i CSS
- 7. Usuń wszystkie przechowywane procedury naraz
- 8. UIButton usuń wszystkie akcje docelowe
- 9. Pusty katalog (usuń wszystkie pliki)
- 10. C# Usuń wszystkie puste podkatalogi.
- 11. Usuń wszystkie elementy wewnątrz linelayout
- 12. Usuń wszystkie ukośniki w JavaScript
- 13. Usuń wszystkie przedmioty z listy
- 14. Usuń wszystkie dzieci z QVBoxLayout
- 15. Usuń wszystkie style, skrypty i tagi HTML stronie html
- 16. usuń wszystkie ograniczniki na początku i końcu ciągu znaków
- 17. Usuń wszystkie spacje i tabulatory na końcu moich linii.
- 18. JQuery DataTables - Usuń fnFilter i wyświetl wszystkie wyniki
- 19. Połącz dwie elokwentne kolekcje i usuń wszystkie duplikaty.
- 20. Usuń wszystkie węzły i relacje w neo4j 1,8
- 21. Usuń WSZYSTKIE Ciasteczka z jquery i ustaw nowe
- 22. Usuń wszystkie znaki z wyjątkiem alfanumerycznych i spacje z javascript
- 23. /tmp folder i gcc
- 24. Usuń folder CVS ze wszystkich podfolderów w oknach
- 25. Usuń wszystkie atrybuty XML o podanej nazwie
- 26. Usuń wszystkie inne wiersze w notatniku ++
- 27. Usuń wszystkie pliki utworzone przez określonego użytkownika
- 28. Usuń wszystkie znaczniki z repozytorium Git
- 29. Usuń wszystkie pliki zachowując strukturę katalogów
- 30. Usuń wszystkie linie przed meczem z sed
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