2013-04-12 28 views
5

我有這樣的基本代碼Directory.GetFiles()是searchPattern

Directory.GetFiles(filepath, "*.OUT") 

在filepath是一個名爲Filename.OUT

上述代碼發現文件細文件。

現在,我通過附加一個UniqueID來重命名文件,以便文件不會再被拾取。

Filename.OUT6F9619FF-8B86-D011-B42D-00C04FC964FF

但是,該文件仍然得到由Directory.GetFiles()拿起!

那麼,searchpattern(*.OUT)是一個正則表達式模式嗎?如果是這樣,這是有道理的。

關於MSDN的信息似乎並不意味着它是。如果沒有,是否有我可以使用的模式,以便它不被拾取?

回答

3

我不得不在處理文件系統監視器時自己處理這個問題。添加到什麼MichaelPerrenoud說,你可以通過一個快速過濾器運行您所有的比賽,如:

bool ExtensionOf (String f, String targetext) { 
    return f.EndsWith(targetext); 
} 

如果你不需要的targetext的靈活性,只需用".OUT"

好運取代它完全!

+0

1。這是一個很好的擴展方法。 –

3

這是正常現象,因爲在文檔中您鏈接它指出:

一個是searchPattern與正好三個字符的文件擴展名返回具有三個或更多字符,其中前三個字符的擴展名的文件匹配searchPattern中指定的文件擴展名。

但相比之下它指出:

阿是searchPattern具有一個,兩個,或三個以上的字符的文件擴展名僅返回具有匹配所指定的文件的擴展,正是長度的擴展名的文件在searchPattern中。

所以在你的情況下,你要篩選出的結果。我希望它是不同的。這對很多人來說都是一個問題,甚至包括我自己在內。

2

可以剝離出(子串)的輸入字符串由所述GUID的長度:

string fileName = "Filename.OUT"; 
string seed = "6F9619FF-8B86-D011-B42D-00C04FC964FF"; 
string input = fileName + seed; 
string result = input.Substring(0, input.Length - seed.Length); 
FileInfo file = new FileInfo(result); 
Console.WriteLine(file.Extension); 

,並用結果作爲平時工作:

private static string StripSeed(string input) 
{ 
    return input.Substring(0, input.Length - 36); // length of seed (guid) 
} 

Directory.EnumerateFile("*.*") 
     .Select(p => StripSeed(p)) 
     .Select(f => new FileInfo(f)) 
     .Where(fi => fi.Extesnsion.Equals(".OUT", StringComparison.OrdinalIgnoreCase)); 

Sandbox.

相關問題