2016-03-21 50 views
2

过滤Directory.EnumerateFiles我希望所有的XML文件的文件夹中像这样的列表:如何使用特定的扩展

foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml")) 
{ 
    // add file to a collection 
} 

但是,如果我因为某种原因在folderPath任何文件与.xmlXXX哪里结束XXX代表任何字符,那么它们将是枚举器的一部分。

如果可以做这样的事情

foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml").Where(x => x.EndsWith(".xml"))) 

容易解决,但它似乎有点奇怪给我,因为我基本上寻找同样的事情两次。有没有办法直接得到正确的文件,或者我做错了什么?

回答

3

的最佳解决方案是与文件搜索通配符使用的记录/默认行为。

Directory.EnumerateFiles Method (String, String)

如果指定的扩展是完全长三个字符,则 方法返回的文件有与指定 扩展开始扩展。例如,“* .xls”返回“book.xls”和 “book.xlsx”。

您目前的两次过滤方法是正确的。

,你唯一可以做的改进是在EndsWith忽略大小写,如:对我

x.EndsWith(".xml", StringComparison.CurrentCultureIgnoreCase) 
+0

耻辱无法正常阅读文档。感谢您的改进 – Daltons

1

好像你不能使用3个字符的扩展EnumerateFiles做到这一点,根据从文章MSDN

引用上述

当您使用星号通配符的是searchPattern如“.txt“,指定扩展名中的字符数会影响搜索,如下所示: 如果指定的扩展名只有三个字符长,则该方法返回扩展名以指定扩展名开头的文件。例如,“ .xls”返回“book.xls”和“book.xlsx”。 在其他所有情况下,该方法返回与指定扩展名完全匹配的文件。例如,“.ai”返回“file.ai”而不是“file.aif”。 当您使用问号通配符时,此方法仅返回与指定的文件扩展名匹配的文件。例如,在目录中,给定两个文件“file1.txt”和“file1.txtother”,“file?.txt”的搜索模式仅返回第一个文件,而“文件.txt”返回这两个文件。

因此使用。凡扩展似乎是你的问题

相关问题