C# 处理排除的.net DirectoryInfo通配符模式

C# 处理排除的.net DirectoryInfo通配符模式,c#,C#,下面的方法调用返回给定目录中的所有xml文件 FileInfo[] Files = Directory.GetFiles("*.xml"); 我想获取目录中文件名不以“\u update.XML”结尾的所有XML文件 例如。。。。如果我有以下文件 ABC.xml ABC2.xml ABC3_update.xml 那么我想要一个只会返回的电话: ABC.xml ABC2.xml 这是可能的吗?不需要这样的通配符映射,不需要。以后需要删除不需要的通配符映射 请注意,Directory.GetF

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

FileInfo[] Files = Directory.GetFiles("*.xml");
我想获取目录中文件名不以“\u update.XML”结尾的所有XML文件

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

ABC.xml
ABC2.xml
ABC3_update.xml
那么我想要一个只会返回的电话:

ABC.xml
ABC2.xml

这是可能的吗?

不需要这样的通配符映射,不需要。以后需要删除不需要的通配符映射

请注意,
Directory.GetFiles(“*.xml”)
实际上被解释为匹配所有扩展名
xml
开头的文件,而不仅仅是
xml
——这是该方法的一个怪癖!因此,您可能还必须以类似的方式排除其他文件

对它的解释如下:

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


我不相信你可以用搜索通配符来排除这种情况。但是,您可以在事件发生后过滤文件列表。和林克在一起很容易。尽管如此,如果您的目录非常大,这可能会导致对内存中的文件列表进行大量处理

尝试:


虽然这会在GetFiles已经执行之后执行LINQ,所以如果他因为目录非常大而试图限制,这可能对JL没有帮助,您也可以这样做…只需放置一个!在whereJust中,更新应为StringComparison.CurrentCultureInoRecase
FileInfo[] files = 
    Directory.GetFiles("*.xml")  // all XML files
         .Where( fi => !fi.Name.EndsWith( "_update.xml", CurrentCultureIgnoreCase ) )
         .ToArray();