¿Cómo eliminar todos los archivos y carpetas de un directorio?
Usando C#, ¿cómo puedo eliminar todos los archivos y carpetas de un directorio, pero conservar el directorio raíz?
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()
.
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();
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();
}
}
La forma más sencilla:
Directory.Delete(path,true);
Directory.CreateDirectory(path);
Tenga en cuenta que esto puede eliminar algunos permisos de la carpeta.