System.IO.DirectoryInfo di = new DirectoryInfo("YourPath");
foreach (FileInfo file in di.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
dir.Delete(true);
}
如果您的目录可能包含许多文件,则EnumerateFiles()
GetFiles()
效率更高,因为当您使用EnumerateFiles()
您可以在返回整个集合之前开始枚举它,而不是需要加载该文件的GetFiles()
在开始枚举之前,将整个集合存储在内存中。在这里看到这个报价:
因此,当您处理许多文件和目录时,EnumerateFiles()会更高效。
这同样适用于EnumerateDirectories()
和GetDirectories()
。因此,代码将是:
foreach (FileInfo file in di.EnumerateFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in di.EnumerateDirectories())
{
dir.Delete(true);
}
出于这个问题的目的,实际上没有理由使用GetFiles()
和GetDirectories()
。
是的,这是正确的方法。如果您想给自己一个 “干净” 的功能(或者,我想称之为 “空” 功能),则可以创建一个扩展方法。
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);
}
然后,这将允许您执行类似的操作。
System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"C:\...");
directory.Empty();
以下代码将递归清除文件夹:
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();
}
}