C # eliminar una carpeta y todos los archivos y carpetas dentro de esa carpeta

104

Estoy tratando de eliminar una carpeta y todos los archivos y carpetas dentro de esa carpeta, estoy usando el código a continuación y aparece el error Folder is not empty, ¿alguna sugerencia sobre lo que puedo hacer?

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);
}
Jamie
fuente

Respuestas:

167
dir.Delete(true); // true => recursive delete
Tommy Carlier
fuente
111

Leer el manual:

Método Directory.Delete (String, Boolean)

Directory.Delete(folderPath, true);
Morfildur
fuente
68
¿Por qué leer el manual cuando es mucho más rápido buscarlo en Google y terminar aquí?
reggaeguitar
5
Esto es tan cierto
Corvin
4
De hecho ... solo busqué en Google esto, y esta publicación fue el primer resultado de Google.
MasterN8
2
Lo que hago a veces es hacer la pregunta y luego responderla yo mismo para ayudar a los futuros usuarios de Google. StackOverflow le permite publicar la pregunta y la respuesta simultáneamente.
DharmaTurtle
1
Empecé a hacer toda mi documentación local de esta manera. No es una pregunta frecuente, más bien preguntas SO. es decir, ¿cómo lo hago? o ¿Qué es esto?
Paul Duer
23

Tratar:

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

Esto eliminará de forma recursiva todos los archivos y carpetas debajo de "ruta", suponiendo que tenga los permisos para hacerlo.

jinsungy
fuente
6

Err, ¿qué pasa con solo llamar Directory.Delete(path, true);?

Dmitri Nesteruk
fuente
5

El método Directory.Delete tiene un parámetro booleano recursivo, debería hacer lo que necesita

Paolo Tedesco
fuente
3

Prueba 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");
        }
    }
}
Rosidin Bima
fuente
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);
    }
}
Dekdev
fuente
0

Prueba esto:

foreach (string files in Directory.GetFiles(SourcePath))
{
   FileInfo fileInfo = new FileInfo(files);
   fileInfo.Delete(); //delete the files first. 
}
Directory.Delete(SourcePath);// delete the directory as it is empty now.
Príncipe
fuente
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre cómo y / o por qué resuelve el problema mejoraría el valor de la respuesta a largo plazo. Lea esto
Shanteshwar Inde
0

Para aquellos de ustedes que se encuentran con la excepción DirectoryNotFoundException, agreguen esta verificación:

if (Directory.Exists(path)) Directory.Delete(path, true);
Yster
fuente