【发布时间】:2025-12-31 23:50:02
【问题描述】:
您知道在 linux 中这很容易,但我不能仅仅理解如何在 Windows 上的 C# 中做到这一点。我想删除与通配符f*.txt 匹配的所有文件。我该怎么做呢?
【问题讨论】:
您知道在 linux 中这很容易,但我不能仅仅理解如何在 Windows 上的 C# 中做到这一点。我想删除与通配符f*.txt 匹配的所有文件。我该怎么做呢?
【问题讨论】:
您可以使用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());
EnumerateFiles 而不是 GetFiles 的点。
我知道这个问题已经得到解答,而且答案很好,但是在 .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.GetFiles 方法与通配符重载一起使用。这将返回与您的模式匹配的所有文件名。然后您可以删除这些文件。
【讨论】:
我很欣赏这个线程现在有点老了,但是如果你想使用 linq 那么
Directory.GetFiles("f:\\TestData", "*.zip", SearchOption.TopDirectoryOnly).ToList().ForEach(File.Delete);
【讨论】: