[英]What is the best way to empty a directory?
有沒有一種方法可以刪除指定目錄的所有文件和子目錄,而無需對其進行遍歷?
非優雅的解決方案:
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);
}
}
}
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();
}
為什么那不優雅? 它很干凈,可讀性很強。
好吧,您始終可以只使用Directory.Delete...。
http://msdn.microsoft.com/zh-CN/library/aa328748%28VS.71%29.aspx
或者,如果您想花哨的話,請使用WMI刪除目錄。
這是一個基於OP原始代碼的擴展方法,我認為這是很好的方法,比其他選項更具可讀性。
我同意在框架中使用單個方法刪除目錄的內容而不刪除目錄會很好,但是我認為這是下一件好事。
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);
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.