以下方法调用返回给定目录中的所有xml文件。
FileInfo[] Files = Directory.GetFiles("*.xml");
我想在fileName没有以“_update.xml”结尾的目录中获取所有XML文件
例如....如果我有以下文件
ABC.xml
ABC2.xml
ABC3_update.xml
然后我想要一个只会返回的电话:
ABC.xml
ABC2.xml
这可能吗?
答案 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“返回两个文件。