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

时间:2013-02-16 21:46:14

标签: c# .net directory

当我将以下行添加到我的WPF应用程序中时,我遇到了一些奇怪的问题。

private void button1_Click(object sender, RoutedEventArgs e)
{

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

}

问题是在 FrameWork 3.5 中,上面的方法什么都不做,甚至没有错误,但如果我将其更改为 FrameWork 4.5 有用!。此外,如果我使用 Framework 3.5 并将其更改为ConsolApp,就像这样

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

代码给出了一些结果。

有没有人遇到同样的问题?

1 个答案:

答案 0 :(得分: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。

你应该使用'*'或'*。*'来兼容。