Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/04/2013, 07:24
amchacon
 
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