2013-02-16 112 views
9

當我將以下行添加到我的WPF應用程序中時,出現了一些奇怪的問題。Directory.GetFiles()不適用於模式「。」

private void button1_Click(object sender, RoutedEventArgs e) 
{ 

    foreach(string files in Directory.GetFiles(path,".",SearchOption.TopDirectoryOnly)) 
     tb_FileBrowse.Text = files; 

} 

的事情是,在框架3.5上述方法不做任何事情,甚至不是一個錯誤,但如果我將其更改爲框架4.5 它的作品!另外,如果我使用框架3.5並將其轉換爲ConsolApp這樣

foreach (string files in Directory.GetFiles(path, ".", SearchOption.TopDirectoryOnly)) 
{ 
    Console.WriteLine("{0}",files); 
} 

代碼給出了一定的成效。

有沒有人有同樣的問題?

+0

我認爲正確的搜索模式應該是「\ *。\ *」。 Mayby你的代碼包含「\ *。\ *」,但是這個網站沒有任何東西取代了\ *。 (當我寫這篇評論時,我遇到了這個問題。)在那種情況下,我不知道問題是什麼。要顯示一個\ *你應該寫\\ * – Casperah 2013-02-16 21:51:53

+0

我已經編輯過你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-02-16 21:55:45

回答

11

我試過這個,得到了同樣的結果。使用Resharper鑽取API源代碼顯示.NET 3.5和4.5版本的Directory.GetFiles完全不同。

特別是.NET 4.5版本包含此功能(和.NET 3.5沒有):

private static string NormalizeSearchPattern(string searchPattern) 
{ 
    string searchPattern1 = searchPattern.TrimEnd(Path.TrimEndChars); 
    if (searchPattern1.Equals(".")) 
    searchPattern1 = "*"; 
    Path.CheckSearchPattern(searchPattern1); 
    return searchPattern1; 
} 

這就解釋了爲什麼一個搜索模式 ''適用於.NET 4.5,但不適用於3.5。

爲了兼容性,您應該使用'*'或'*。*'。

+1

出於好奇和完整性:4.0呢? – JustAnotherUserYouMayKnow 2013-02-16 22:05:15

+2

'。'也適用於4.0。 – Phil 2013-02-16 22:07:18

+4

+1。我會避免使用「。」在Windows中「。」通常意味着「當前目錄」(「..」是父目錄),所以我個人看不到爲什麼「當前目錄」模式意味着「給定文件夾中的所有文件」。我敢打賭,通過用「。」調用'GetFiles',大多數人會感到困惑。作爲模式。 – 2013-02-17 01:57:01

相關問題