使用通配符删除多个文件

Posted

技术标签:

【中文标题】使用通配符删除多个文件【英文标题】:Deleting multiple files with wildcard 【发布时间】:2012-02-07 02:19:34 【问题描述】:

您知道在 linux 中这很容易,但我不能仅仅理解如何在 Windows 上的 C# 中做到这一点。我想删除与通配符f*.txt 匹配的所有文件。我该怎么做呢?

【问题讨论】:

【参考方案1】:

您可以使用DirectoryInfo.EnumerateFiles function:

var dir = new DirectoryInfo(directoryPath);

foreach (var file in dir.EnumerateFiles("f*.txt")) 
    file.Delete();

(当然,您可能想要添加错误处理。)

【讨论】:

或更短:dir.EnumerateFiles("f*.txt").ToList().ForEach(f => f.Delete()); @jstuardo:创建一个列表会破坏切换到 EnumerateFiles 而不是 GetFiles 的点。【参考方案2】:

我知道这个问题已经得到解答,而且答案很好,但是在 .NET 4.0 及更高版本中还有一个替代方案。使用Directory.EnumerateFiles(),因此:

foreach (string f in Directory.EnumerateFiles(myDirectory,"f*.txt"))

    File.Delete(f);

DirectoryInfo.GetFiles() 的缺点是它返回一个文件列表——这在 99.9% 的情况下都很棒。缺点是如果文件夹包含数以万计的文件(这种情况很少见),那么它会变得非常慢,并且枚举匹配的文件要快得多。

【讨论】:

请注意,DirectoryInfo 也有 EnumerateFiles() 如果有人想知道为什么这个答案与接受的答案如此相似,那是因为接受的答案已经根据这个被重写了。真可惜,因为使用 DirectoryInfo.GetFiles()(这是原始答案)是 .NET 早期版本的唯一方法。 这个答案 Directory.EnumerateFiles() 仍然比接受的答案更快,因为它返回字符串的 IEnumerable,而不是所有其他属性也需要填充的 FileInfo 类。如果想在删除之前或之后对文件信息执行其他操作,请使用 DirectorInfo,但如果您只是删除,请使用 Directory。在大目录中会快很多。【参考方案3】:

您可以将Directory.GetFiles 方法与通配符重载一起使用。这将返回与您的模式匹配的所有文件名。然后您可以删除这些文件。

【讨论】:

【参考方案4】:

我很欣赏这个线程现在有点老了,但是如果你想使用 linq 那么

Directory.GetFiles("f:\\TestData", "*.zip", SearchOption.TopDirectoryOnly).ToList().ForEach(File.Delete);

【讨论】:

以上是关于使用通配符删除多个文件的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 脚本任务使用通配符删除文件

linux下使用通配符批量删除文件

如何使用通配符导入多个具有相似工作表名称的 Excel 文件?

如何在 Windows 命令行中使用通配符解码多个文件 [关闭]

如何在类路径中使用通配符来添加多个 jar? [复制]

autofs使用indirect mount时,配置通配符,并且目录来自于多个文件系统时如何配置