有没有办法删除所有文件&指定目录的子目录而不迭代它们?
非优雅的解决方案:
public static void EmptyDirectory(string path)
{
if (Directory.Exists(path))
{
// Delete all files
foreach (var file in Directory.GetFiles(path))
{
File.Delete(file);
}
// Delete all folders
foreach (var directory in Directory.GetDirectories(path))
{
Directory.Delete(directory, true);
}
}
}
答案 0 :(得分:10)
System.IO.Directory.Delete怎么样?它有一个递归选项,你甚至使用它。检查你的代码看起来你正试图做一些稍微不同的事情 - 清空目录而不删除它,对吧?好吧,你可以删除它并重新创建它:)
在任何情况下,您(或您使用的某些方法)必须遍历所有文件和子目录。但是,您可以使用GetFileSystemInfos:
同时迭代文件和目录foreach(System.IO.FileSystemInfo fsi in
new System.IO.DirectoryInfo(path).GetFileSystemInfos())
{
if (fsi is System.IO.DirectoryInfo)
((System.IO.DirectoryInfo)fsi).Delete(true);
else
fsi.Delete();
}
答案 1 :(得分:3)
为什么不优雅?它很干净,非常易读并能完成工作。
答案 2 :(得分:2)
好吧,你总是可以使用Directory.Delete ....
http://msdn.microsoft.com/en-us/library/aa328748%28VS.71%29.aspx
或者,如果您想获得幻想,请使用WMI删除目录。
答案 3 :(得分:0)
这是基于OPs原始代码的扩展方法,我认为这是很好的方法,比其他选项更具可读性。
我同意在框架中使用单个方法删除目录的内容而不删除目录会很好,但是我认为这是下一件好事。
using System;
using System.IO;
namespace YourNamespace
{
public static class DirectoryInfoExtensions
{
public static void EmptyDirectory(this DirectoryInfo di)
{
if (di.Exists)
{
foreach (var file in di.GetFiles())
{
file.Delete();
}
foreach (var directory in di.GetDirectories())
{
directory.Delete(true);
}
}
}
}
}