2010-01-13 35 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