我需要得到一个文件夹中的所有ASP文件的搜索模式,所以我写了这样的代码:Directory.GetFiles - 文件扩展名
string[] files = Directory.GetFiles(@"C:\Folder", "*.asp", SearchOption.AllDirectories);
然而,它也返回扩展名为“ASPX”文件。
是否有指定扩展的最后一个方法是什么?
对不起,我提前英语和感谢。
我需要得到一个文件夹中的所有ASP文件的搜索模式,所以我写了这样的代码:Directory.GetFiles - 文件扩展名
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
方法有哪些可以避免这种情况的直接工作的特定行为。从docs:
如果指定的扩展名只有三个字符长,则该方法返回扩展名以指定扩展名开头的文件。例如,“* .xls”返回“book.xls”和“book.xlsx”。
这是普通搜索规则的一个例外,但在你的情况下,它正在对付你。使用EnumerateFiles
对结果进行流式处理,然后进行过滤,可以仅查找适当的匹配项。
谢谢。它工作得很好。 – 2014-09-26 18:36:36
不幸的是,我不认为有一个内置的方式。但是
Directory.EnumerateFiles(@"C:\Folder", "*.asp", SearchOption.AllDirectories).Where(f => f.EndsWith(".asp")
应该与直接查询一样具有性能。 (注意,EnumerateFiles
返回一个IEnumerable,如果你不需要数组中的实际文件,则返回GetFiles)
请注意,这将是区分大小写,这可能是不受欢迎的... – 2014-09-26 18:27:05
我看到芦苇贴了这个答案的更好的版本,而我输入我的,反正。 – ths 2014-09-26 18:28:25
确实如此,我不需要一个数组! – 2014-09-26 18:38:23
没有测试它,但'* .asp?'模式可能会工作 – Viper 2014-09-26 18:16:23
你可以尝试IF THEN ELSE声明。 IF var ==“* .asp”。因此,首先编写一个检查相等性的函数,然后将该函数作为输入参数传递。 – Juniar 2014-09-26 18:30:52