2009-07-19 23 views
21

Jak mogę usunąć folder ze wszystkimi jego plikami/podkatalogami (usuwanie rekursywne) w C++?Usuń folder i wszystkie pliki/podkatalogi

+0

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

Odpowiedz

1

Standardowy C++ nie zapewnia tego - będziesz musiał użyć specyficznego dla systemu operacyjnego kodu lub biblioteki międzyplatformowej, takiej jak Boost.

18

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; 
} 
+10

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. –

+0

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. –

4

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.

Powiązane problemy