Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Funcion recursiva eliminar archivos

Estas en el tema de Funcion recursiva eliminar archivos en el foro de C/C++ en Foros del Web. Hola a todos, Mi idea es hacer un programa que a través de una función recursiva permita eliminar todos los archivos de unas determinadas extensiones ...
  #1 (permalink)  
Antiguo 07/04/2013, 09:12
Avatar de pepitogrillo13051993  
Fecha de Ingreso: febrero-2013
Mensajes: 20
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Funcion recursiva eliminar archivos

Hola a todos,
Mi idea es hacer un programa que a través de una función recursiva permita eliminar todos los archivos de unas determinadas extensiones o unos determinados nombres, que se encuentren en el árbol de directorios del disco duro especificado por el usuario.
Soy consciente de que la función main debe recibir primer parámetro el directorio a partir del cual realizará la tarea, como segundo parámetro una palabra que indique si debemos eliminar archivos por extensión o por nombre completo, y a continuación recibirá todas las extensiones o los nombres de los ficheros a eliminar.
Sabiendo esto, no se que es lo que tengo que hacer en la función para que recorra el directorio, elimine archivos (en el caso de que haya alguno), entrar en subdirectorios y así hasta acabar de eliminar los archivos.
Espero que me puedan ayudar, muchas gracias a todos!
  #2 (permalink)  
Antiguo 07/04/2013, 16:30
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Funcion recursiva eliminar archivos

Hola! creo q lo primero a tener en cuenta es tener los permisos correspondientes como para eliminar dicho archivo. Luego para recorrer y eliminar archivos podes usar la libreria dirent, que es facil de usar(si estas en linux)


Saludos
  #3 (permalink)  
Antiguo 12/04/2013, 07:24
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Funcion recursiva eliminar archivos

Aquí te dejo una función recursiva para listar los archivos de una carpeta (y las subcarpetas) (Windows):

Código C++:
Ver original
  1. listarDirectorio(".");
  2.  
  3. // Lista los archivos de una carpeta, usado para empaquetar
  4.  
  5. void listarDirectorio(string Cosa)
  6. {
  7.     // Variables del sistema
  8.    
  9.     WIN32_FIND_DATA findFileData;
  10.     HANDLE          hFind;      
  11.    
  12.     /* Variable con el nombre del fichero, se añade el . para designar el fichero
  13.     actual y se coloca un * al final para decirle al programa que queremos acceder
  14.     a los archivos contenidos, no al directorio en sí */
  15.    
  16.     //string Cosa = ".\\Cosita\\*";
  17.    
  18.     string Buffer;
  19.    
  20.     // Iniciamos la busqueda y le pasamos un valor a nuestro Handle
  21.  
  22.     hFind = FindFirstFile(Cosa.c_str(), &findFileData);
  23.    
  24.     // Si no existe la carpeta
  25.  
  26.     if (hFind == INVALID_HANDLE_VALUE)
  27.     {
  28.         std::cout << "La carpeta Cosita no existe";
  29.     }    
  30.    
  31.     else
  32.     {
  33.         //  Si existe, pasamos al siguiente fichero (el primero solo contiene basura)
  34.        
  35.          FindNextFile(hFind, &findFileData);
  36.          
  37.                 // Listamos todos los ficheros restantes
  38.                
  39.           while (FindNextFile(hFind, &findFileData) != 0)
  40.             {
  41.                 Buffer = Cosa; // Creamos una variable de nombre con el valor del directorio
  42.                 Buffer.erase(Buffer.size()-1); // Borramos el asterisco
  43.                 Buffer += findFileData.cFileName;
  44.  
  45.                 if (GetFileAttributes(Buffer.c_str()) == FILE_ATTRIBUTE_DIRECTORY)
  46.                 {
  47.                    Buffer += "\\*";
  48.                    listarDirectorio(Buffer);
  49.                 }  
  50.                 else
  51.                 {
  52.                     cout<<Buffer<<endl;
  53.                 }
  54.             }
  55.     }
  56. }

Sustituye el cout por un remove:
http://c.conclase.net/librerias/?ansifun=remove

O su equivalente de Windows Api:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Etiquetas: c++, programa, recursiva
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:22.