Directory.GetFiles()不适用于模式“。”

问题描述:

当我将以下行添加到我的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

我试过这个,得到了同样的结果。使用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