2010-02-08 88 views
52

Estoy tratando de eliminar una carpeta y todos los archivos y carpetas dentro de esa carpeta, estoy usando el código siguiente y me sale el error Folder is not empty, cualquier sugerencia sobre qué ¿Puedo hacer?C# eliminar una carpeta y todos los archivos y carpetas dentro de esa carpeta

try 
{ 
    var dir = new DirectoryInfo(@FolderPath); 
    dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly; 
    dir.Delete(); 
    dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index); 
} 
catch (IOException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

Respuesta

84
dir.Delete(true); // true => recursive delete 
54

Lea el manual:

Directory.Delete Method (String, Boolean)

Directory.Delete(folderPath, true); 
+14

¿Por qué leer el manual cuando es mucho más rápido buscarlo en Google y terminar aquí? – reggaeguitar

+0

Cuando se establece en verdadero esto eliminará todos los directorios, subdirectorios y archivos en la ruta. ¿También eliminará la ruta en sí? Si se establece en falso, ¿eliminará la ruta y qué pasa con el subdirectorio y los archivos en la ruta? – helloworld

4

El método Directory.Delete tiene un parámetro booleano recursiva, debe hacer lo que tiene

+0

Cuando se establece en verdadero esto eliminará todos los directorios, subdirectorios y archivos en la ruta. ¿También eliminará la ruta en sí? Si se establece en falso, ¿eliminará la ruta y qué pasa con el subdirectorio y los archivos en la ruta – helloworld

6

Err, ¿qué pasa justo llamando al Directory.Delete(path, true);?

+0

Cuando se establece en verdadero, esto eliminará todos los directorios, subdirectorios y archivos en la ruta. ¿También eliminará la ruta en sí? Si se establece en falso, ¿eliminará la ruta y qué pasa con el subdirectorio y los archivos en la ruta? – helloworld

18

Probar:

System.IO.Directory.Delete(path,true) 

Esto forma recursiva eliminar todos los archivos y carpetas debajo de "camino" suponiendo que tiene los permisos para hacerlo.

+0

Cuando se establece en verdadero esto eliminará todos los directorios, subdirectorios y archivos en la ruta. ¿También eliminará la ruta en sí? Si se establece en falso, ¿eliminará la ruta y qué pasa con el subdirectorio y los archivos en la ruta? – helloworld

3

Deberá utilizar:

dir.Delete(true); 

para borrar recursivamente el contenido de esa carpeta también. Ver MSDN DirectoryInfo.Delete() overloads.

+0

Cuando se establece en verdadero esto eliminará todos los directorios, subdirectorios y archivos en la ruta. ¿También eliminará la ruta en sí? Si se establece en falso, ¿eliminará la ruta y qué pasa con el subdirectorio y los archivos en la ruta? – helloworld

0
public void Empty(System.IO.DirectoryInfo directory) 
{ 
    try 
    { 
     logger.DebugFormat("Empty directory {0}", directory.FullName); 
     foreach (System.IO.FileInfo file in directory.GetFiles()) file.Delete(); 
     foreach (System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true); 
    } 
    catch (Exception ex) 
    { 
     ex.Data.Add("directory", Convert.ToString(directory.FullName, CultureInfo.InvariantCulture)); 

     throw new Exception(string.Format(CultureInfo.InvariantCulture,"Method:{0}", ex.TargetSite), ex); 
    } 
} 
2

Pruebe esto.

namespace EraseJunkFiles 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DirectoryInfo yourRootDir = new DirectoryInfo(@"C:\somedirectory\"); 
      foreach (DirectoryInfo dir in yourRootDir.GetDirectories()) 
        DeleteDirectory(dir.FullName, true); 
     } 
     public static void DeleteDirectory(string directoryName, bool checkDirectiryExist) 
     { 
      if (Directory.Exists(directoryName)) 
       Directory.Delete(directoryName, true); 
      else if (checkDirectiryExist) 
       throw new SystemException("Directory you want to delete is not exist"); 
     } 
    } 
} 
Cuestiones relacionadas