.net DirectoryInfo通配符模式来处理排除

时间:2010-01-13 19:39:58

标签: c#

以下方法调用返回给定目录中的所有xml文件。

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

我想在fileName没有以“_update.xml”结尾的目录中获取所有XML文件

例如....如果我有以下文件

ABC.xml
ABC2.xml
ABC3_update.xml

然后我想要一个只会返回的电话:

ABC.xml
ABC2.xml

这可能吗?

2 个答案:

答案 0 :(得分:13)

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

尝试:

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

答案 1 :(得分:5)

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

请注意,Directory.GetFiles("*.xml")实际上被解释为匹配所有扩展名为 xml的文件,而不仅仅是xml - 这是该方法的一个怪癖!所以你可能也必须以类似的方式排除其他文件。

this page of MSDN上,它的解释如下:

  

在searchPattern中使用星号通配符时(例如,“ .txt”),匹配行为会根据指定文件扩展名的长度而有所不同。具有正好三个字符的文件扩展名的searchPattern将返回扩展名为三个或更多字符的文件,其中前三个字符与searchPattern中指定的文件扩展名匹配。文件扩展名为一个,两个或三个以上字符的searchPattern仅返回扩展名与searchPattern中指定的文件扩展名完全匹配的文件。使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。例如,给定目录中的两个文件“file1.txt”和“file1.txtother”,搜索模式“file?.txt”仅返回第一个文件,而搜索模式为“file ”。 txt“返回两个文件。