【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
使用C#,如何从目录中删除所有文件和文件夹,但仍保留根目录?
#1楼
string directoryPath = "C:\Temp";
Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete);
Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete);
#2楼
new System.IO.DirectoryInfo(@"C:\Temp").Delete(true);
//Or
System.IO.Directory.Delete(@"C:\Temp", true);
#3楼
在Windows 7中,如果您刚刚使用Windows资源管理器手动创建它,则目录结构与此类似:
C:
\AAA
\BBB
\CCC
\DDD
并且运行原始问题中建议的代码来清理目录C:\\ AAA,当尝试删除BBB时,行di.Delete(true)总是因IOException“目录不为空”而失败。 这可能是因为Windows资源管理器中存在某种延迟/缓存。
以下代码可靠地为我工作:
static void Main(string[] args)
{
DirectoryInfo di = new DirectoryInfo(@"c:\aaa");
CleanDirectory(di);
}
private static void CleanDirectory(DirectoryInfo di)
{
if (di == null)
return;
foreach (FileSystemInfo fsEntry in di.GetFileSystemInfos())
{
CleanDirectory(fsEntry as DirectoryInfo);
fsEntry.Delete();
}
WaitForDirectoryToBecomeEmpty(di);
}
private static void WaitForDirectoryToBecomeEmpty(DirectoryInfo di)
{
for (int i = 0; i < 5; i++)
{
if (di.GetFileSystemInfos().Length == 0)
return;
Console.WriteLine(di.FullName + i);
Thread.Sleep(50 * i);
}
}
#4楼
我试过的每一种方法,都在System.IO错误的某些方面失败了。 以下方法可以肯定,即使文件夹是空的,也可以是只读的,等等。
ProcessStartInfo Info = new ProcessStartInfo();
Info.Arguments = "/C rd /s /q \"C:\\MyFolder"";
Info.WindowStyle = ProcessWindowStyle.Hidden;
Info.CreateNoWindow = true;
Info.FileName = "cmd.exe";
Process.Start(Info);
#5楼
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() 。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3152740