Directory.GetFiles - 文件扩展名的搜索模式

本文关键字:搜索 模式 扩展名 文件 GetFiles Directory | 更新日期: 2023-09-27 18:24:54

我需要将所有ASP文件都放在一个文件夹中,所以我写了这样的代码:

string[] files = Directory.GetFiles(@"C:'Folder", "*.asp", SearchOption.AllDirectories);

但是,它还返回扩展名为"aspx"的文件。

有没有办法指定扩展的结尾?

对不起我的英语,提前感谢。

Directory.GetFiles - 文件扩展名的搜索模式

有没有办法指定扩展的结尾?

没有办法直接执行此操作。 最好的选择是切换到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 更可取(