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

时间:2014-09-26 18:13:33

标签: c#

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

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

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

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

对不起我的英文,并提前致谢。

2 个答案:

答案 0 :(得分:5)

  

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

没有办法直接这样做。最好的选择是切换到Directory.EnumerateFiles并在之后过滤:

var files = Directory.EnumerateFiles(@"C:\Folder", "*.asp", SearchOption.AllDirectories)
                     .Where(f => f.EndsWith(".asp", StringComparison.OrdinalIgnoreCase));

这是因为Directory方法具有阻止其直接工作的特定行为。来自docs

  

如果指定的扩展名正好是三个字符长,则该方法返回扩展名以指定扩展名开头的文件。例如,“* .xls”同时返回“book.xls”和“book.xlsx”。

这是普通搜索规则的一个例外,但在您的情况下,正在对您不利。使用EnumerateFiles流结果,然后过滤后,您只能找到正确的匹配项。

答案 1 :(得分:1)

不幸的是,我不认为有内置方式。但

Directory.EnumerateFiles(@"C:\Folder", "*.asp", SearchOption.AllDirectories).Where(f => f.EndsWith(".asp")

应该与直接查询一样高效。 (请注意,EnumerateFiles返回IEnumerable,如果您不需要实际存在于数组中的文件,则优于GetFiles)