9

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

代码给出了一些结果。

有没有人有同样的问题?

4

1 回答 1

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。

为了兼容性,您应该使用 '*' 或 '*.*'。

于 2013-02-16T22:03:54.763 回答