2014-09-26 182 views
1

我需要得到一个文件夹中的所有ASP文件的搜索模式,所以我写了这样的代码:Directory.GetFiles - 文件扩展名

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

然而,它也返回扩展名为“ASPX”文件。

是否有指定扩展的最后一个方法是什么?

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

+0

没有测试它,但'* .asp?'模式可能会工作 – Viper 2014-09-26 18:16:23

+0

你可以尝试IF THEN ELSE声明。 IF var ==“* .asp”。因此,首先编写一个检查相等性的函数,然后将该函数作为输入参数传递。 – Juniar 2014-09-26 18:30:52

回答

4

是否有指定扩展的最后一个方法是什么?

没有办法直接做到这一点。最好的办法是切换到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对结果进行流式处理,然后进行过滤,可以仅查找适当的匹配项。

+0

谢谢。它工作得很好。 – 2014-09-26 18:36:36

1

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

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

应该与直接查询一样具有性能。 (注意,EnumerateFiles返回一个IEnumerable,如果你不需要数组中的实际文件,则返回GetFiles)

+0

请注意,这将是区分大小写,这可能是不受欢迎的... – 2014-09-26 18:27:05

+0

我看到芦苇贴了这个答案的更好的版本,而我输入我的,反正。 – ths 2014-09-26 18:28:25

+0

确实如此,我不需要一个数组! – 2014-09-26 18:38:23