¿Cómo eliminar todos los archivos y carpetas de un directorio?

Resuelto JL. asked hace 15 años • 32 respuestas

Usando C#, ¿cómo puedo eliminar todos los archivos y carpetas de un directorio, pero conservar el directorio raíz?

JL. avatar Aug 17 '09 22:08 JL.
Aceptado
System.IO.DirectoryInfo di = new DirectoryInfo("YourPath");

foreach (FileInfo file in di.GetFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
    dir.Delete(true); 
}

Si su directorio puede tener muchos archivos, EnumerateFiles()es más eficiente que GetFiles(), porque cuando lo usa EnumerateFiles()puede comenzar a enumerarlo antes de que se devuelva toda la colección, en lugar de GetFiles()donde necesita cargar toda la colección en la memoria antes de comenzar a enumerarla. Vea esta cita aquí :

Por lo tanto, cuando trabaja con muchos archivos y directorios, EnumerateFiles() puede ser más eficiente.

Lo mismo se aplica a EnumerateDirectories()y GetDirectories(). Entonces el código sería:

foreach (FileInfo file in di.EnumerateFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.EnumerateDirectories())
{
    dir.Delete(true); 
}

A los efectos de esta pregunta, realmente no hay razón para utilizar GetFiles()y GetDirectories().

gsharp avatar Aug 17 '2009 15:08 gsharp

Sí, esa es la forma correcta de hacerlo. Si está buscando tener una función "Limpiar" (o, como prefiero llamarla, "Vaciar"), puede crear un método de extensión.

public static void Empty(this System.IO.DirectoryInfo directory)
{
    foreach(System.IO.FileInfo file in directory.GetFiles()) file.Delete();
    foreach(System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
}

Esto le permitirá hacer algo como...

System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"D:\path\to\some\directory");

directory.Empty();
Adam Robinson avatar Aug 17 '2009 15:08 Adam Robinson

El siguiente código borrará la carpeta de forma recursiva:

private void clearFolder(string FolderName)
{
    DirectoryInfo dir = new DirectoryInfo(FolderName);

    foreach(FileInfo fi in dir.GetFiles())
    {
        fi.Delete();
    }

    foreach (DirectoryInfo di in dir.GetDirectories())
    {
        clearFolder(di.FullName);
        di.Delete();
    }
}
hiteshbiblog avatar May 04 '2010 15:05 hiteshbiblog

La forma más sencilla:

Directory.Delete(path,true);  
Directory.CreateDirectory(path);

Tenga en cuenta que esto puede eliminar algunos permisos de la carpeta.

Igor Mukhachev avatar Aug 16 '2015 08:08 Igor Mukhachev