2009-07-19 22 views
21

¿Cómo puedo eliminar una carpeta con todos sus archivos/subdirectorios (eliminación recursiva) en C++?Eliminar carpeta y todos los archivos/subdirectorios

+0

Simplemente un nodo lateral: hay un duplicado para esta pregunta, si no quiere confiar en el impulso, vale la pena echar un vistazo a la respuesta aceptada [allí] (http://stackoverflow.com/a/2256974/1312382). – Aconcagua

Respuesta

1

El estándar C++ no ofrece ninguna forma de hacerlo: deberá usar un código específico del sistema operativo o una biblioteca multiplataforma como Boost.

18

En serio:

system("rm -rf /path/to/directory") 

Tal vez más de lo que estás buscando, pero Unix específica:

/* 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

¿Fue esto downvoted porque es C en lugar de C++ (aunque se compila muy bien con g ++ -Wall -Wextra), o porque la plataforma de downvoter no tiene nftw? Comenta cuando bajas, ¡por favor! Este es un código sólido. –

+0

¿Qué tan portátil es 'system (" rm -rf/path/to/directory ")'? ¿Funcionará en cualquier sistema operativo * nix? Claramente no funcionará en Windows. –

4

Usted puede utilizar ftw(), nftw(), readdir(), readdir_r() recorrer un directorio, y eliminar archivos recursivamente.
Pero como ni ftw(), nftw(), readdir() es seguro para subprocesos, recomendaré readdir_r() en su lugar si su programa se ejecuta en un entorno de subprocesos múltiples.

Cuestiones relacionadas