Directory.GetFiles()不使用"."模式.

Joh*_*van 9 .net c# directory

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

private void button1_Click(object sender, RoutedEventArgs e)
{

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

}
Run Code Online (Sandbox Code Playgroud)

问题是,在框架3.5,上述方法并没有什么,甚至不是一个错误,但如果我将其更改为框架4.5 它的作品!此外,如果我使用Framework 3.5并将其更改为ConsolApp,就像这样

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

代码给出了一些结果.

有没有人有同样的问题?

Phi*_*hil 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;
}
Run Code Online (Sandbox Code Playgroud)

这解释了为什么搜索模式为'.' 适用于.NET 4.5但不适用于3.5.

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

  • +1.我会避免使用"." 在Windows"." 通常意味着"当前的dierctory"(".."是父母)所以我个人认为没有理由为什么"只是当前目录"模式意味着"给定文件夹中的所有文件".我敢打赌,大多数人都会被称为"GetFiles"而感到困惑." 作为模式. (4认同)