2010-01-13 37 views
8

以下方法调用返回给定目录中的所有xml文件。.net DirectoryInfo通配符排除模式

FileInfo[] Files = Directory.GetFiles("*.xml"); 

我想获得在该文件名不以“_update.xml”

例如....结束目录中的所有XML文件,如果我有以下文件

ABC.xml 
ABC2.xml 
ABC3_update.xml 

然后我想的话,可以只返回:

ABC.xml 
ABC2.xml 

这可能吗?

回答

13

我不相信你可以使用搜索通配符进行排除。但是,您可以在事实后过滤文件列表。 LINQ非常简单。虽然,如果您的目录是非常大的,这可能会导致在内存中的文件列表的很多处理。

尝试:

FileInfo[] files = 
    Directory.GetFiles("*.xml") // all XML files 
     .Where(fi => !fi.Name.EndsWith("_update.xml", CurrentCultureIgnoreCase)) 
     .ToArray(); 
+0

尽管这在执行GetFiles后执行LINQ,所以如果他试图限制,因为目录非常大,它可能不会帮助 – ryber 2010-01-13 19:45:10

+0

JL,你也可以这样做...只是放一个!在哪里 – ryber 2010-01-13 19:45:47

+0

抱歉误读...很棒...这是LINQ的真正威力.... – 2010-01-13 19:46:28

5

没有像这样的通配符映射,没有。你需要删除之后不想要的。

注意Directory.GetFiles("*.xml")实际上是解释为匹配与扩展所有文件xml开始,不只是等于xml - 方法的怪癖!所以你可能不得不以类似的方式排除其他文件。

this page of MSDN它说明这样的:

当在是searchPattern使用星号通配符(例如,“.TXT”),则匹配行为根据指定文件的扩展名的长度变化。具有正好三个字符的文件扩展名的searchPattern会返回具有三个或更多字符的扩展名的文件,其中前三个字符与searchPattern中指定的文件扩展名相匹配。具有一个,两个或多于三个字符的文件扩展名的searchPattern仅返回具有与searchPattern中指定的文件扩展名相匹配的正好具有该长度的扩展名的文件。当使用问号通配符时,此方法只返回与指定文件扩展名匹配的文件。例如,在目录“file1.txt”和“file1.txtother”中给出两个文件,“file?.txt”的搜索模式只返回第一个文件,而“文件.txt”的搜索模式返回两个文件。

+0

-1正则表达式(这有点重型)+2的怪癖 – Will 2010-01-13 19:45:38

+0

是的,同意。已删除。 – 2010-01-13 19:46:19

+0

为怪癖+1 ... – 2010-01-13 19:51:44