【问题标题】:Directory.GetFiles() not working with a pattern of "."Directory.GetFiles() 不适用于“。”模式
【发布时间】:2013-02-01 15:42:00
【问题描述】:

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

代码给出了一些结果。

有人遇到同样的问题吗?

【问题讨论】:

  • 我认为正确的搜索模式应该是“*.*”。也许您的代码包含“*.*”,但该站点将 * 替换为什么都没有。 (我在写这篇评论时遇到了这个问题。)在那种情况下,我不知道问题是什么。要显示 * 你应该写 \*
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# .net directory


【解决方案1】:

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

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

【讨论】:

  • 出于好奇和完整性:4.0 怎么样?
  • +1。我会避免使用“。”在 Windows 中“。”通常意味着“当前目录”(“..”是父级),所以我个人认为“仅当前目录”模式意味着“给定文件夹中的所有文件”没有任何理由。我敢打赌,大多数人都会对用“。”调用GetFiles 感到完全困惑。作为模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多