如何删除目录中的所有文件和文件夹?
是的,那是正确的方法。如果你想要创建一个"干净"(或者,我更愿意称之为"空")的函数,你可以创建一个扩展方法。
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();
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()
。