首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除一个目录中的所有文件和文件夹?

如何删除一个目录中的所有文件和文件夹?
EN

Stack Overflow用户
提问于 2009-08-17 15:48:19
回答 30查看 765.8K关注 0票数 784

使用C#,我如何删除目录中的所有文件和文件夹,但仍然保留根目录?

EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2009-08-17 15:52:46

代码语言:javascript
运行
复制
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(),在开始枚举它之前,您需要在内存中加载整个集合。请参阅此报价here

因此,当您处理许多文件和目录时,EnumerateFiles()可能会更有效。

这同样适用于EnumerateDirectories()GetDirectories()。所以代码应该是:

代码语言:javascript
运行
复制
foreach (FileInfo file in di.EnumerateFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.EnumerateDirectories())
{
    dir.Delete(true); 
}

对于这个问题,确实没有理由使用GetFiles()GetDirectories()

票数 987
EN

Stack Overflow用户

发布于 2009-08-17 15:58:42

是的,这才是正确的做法。如果你想给自己一个"Clean“(或者,我更喜欢称之为"Empty”函数),你可以创建一个扩展方法。

代码语言:javascript
运行
复制
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);
}

这将允许您执行类似于..

代码语言:javascript
运行
复制
System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"C:\...");

directory.Empty();
票数 198
EN

Stack Overflow用户

发布于 2010-05-04 23:36:05

下面的代码将递归地清除该文件夹:

代码语言:javascript
运行
复制
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();
    }
}
票数 83
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1288718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档