Directory.GetFiles - 文件扩展名的搜索模式
本文关键字:搜索 模式 扩展名 文件 GetFiles Directory | 更新日期: 2023-09-27 18:24:54
我需要将所有ASP文件都放在一个文件夹中,所以我写了这样的代码:
string[] files = Directory.GetFiles(@"C:'Folder", "*.asp", SearchOption.AllDirectories);
但是,它还返回扩展名为"aspx"的文件。
有没有办法指定扩展的结尾?
对不起我的英语,提前感谢。
有没有办法指定扩展的结尾?
没有办法直接执行此操作。 最好的选择是切换到Directory.EnumerateFiles
并在之后进行过滤:
var files = Directory.EnumerateFiles(@"C:'Folder", "*.asp", SearchOption.AllDirectories)
.Where(f => f.EndsWith(".asp", StringComparison.OrdinalIgnoreCase));
这是因为Directory
方法具有特定的行为,这会阻止其直接工作。从文档中:
如果指定的扩展名正好是三个字符长,则该方法返回扩展名以指定扩展名开头的文件。例如,"*.xls"同时返回"book.xls"和"book.xlsx"。
这是正常搜索规则的例外,但在您的情况下,对您不利。 使用 EnumerateFiles
流式传输结果,然后筛选允许您仅找到正确的匹配项。
不幸的是,我认为没有内置的方式。
但是Directory.EnumerateFiles(@"C:'Folder", "*.asp", SearchOption.AllDirectories).Where(f => f.EndsWith(".asp")
应该与直接查询一样具有性能。(请注意,EnumerateFiles
返回一个 IEnumerable,如果您不需要数组中的文件,则比 GetFiles 更可取(