使用通配符删除多个文件
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);
【讨论】:
以上是关于使用通配符删除多个文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用通配符导入多个具有相似工作表名称的 Excel 文件?