获取文件时,GetFiles没有获取到正确的文件。

3
我需要获取特定文件夹所有子文件夹中的所有 .txt 文件,我可以这样做:
var files = Directory.GetFiles(reportsFolder, "*.txt", SearchOption.AllDirectories);

然而,在一些文件夹中,我也有像 .txt_TODO 这样的扩展名的文件,它们也会被 GetFiles 检索到。

我该如何跳过这些文件呢?


你可以获取所有文件,然后通过正则表达式".+.txt$"进行过滤。 - Aleks Andreev
我刚刚尝试了一下,但只得到了 .txt 文件。 - fhnaseer
或者添加 .Where(file => Path.GetExtension(file).Equals(".txt", StringComparison.OrdinalIgnoreCase)) - Dmitry Bychenko
2
https://blogs.msdn.microsoft.com/oldnewthing/20140313-00/?p=1513 - Falco Alexander
使用这个模式 "?*.txt" - preciousbetine
1个回答

0

只需通过将扩展名与“.txt”进行比较来过滤结果,例如使用LINQ:

var files = Directory.GetFiles(reportsFolder, "*.txt", SearchOption.AllDirectories)
    .Where(f => Path.GetExtension(f).Equals(".txt", StringComparison.OrdinalIgnoreCase))
    .ToArray();

在这种情况下,使用.EnumerateFiles而不是.GetFiles会更好(避免过早的材料化)。 - Dmitry Bychenko
@DmitryBychenko:当然,但是ToArray()也必须被删除...什么更好取决于他对返回的集合要做什么。 - Klaus Gütter
即使使用最终的.ToArray(),切换到EnumerateFiles似乎仍然是更好的选择:Directory.GetFiles的实际结果立即被Where懒惰地枚举,因此如果保留最终的.ToArray(),则将其替换为EnumerateFiles不会改变行为。 - Vlad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接