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では、上記のメソッドは何も実行せず、エラーも発生しませんが、FrameWork4.5 に変更すると機能します。また、Framework 3.5を使用していて、このようにConsolAppに変更した場合も

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

コードはいくつかの結果をもたらします。

誰かが同じ問題を抱えていますか?

4

1 に答える 1

11

これを試してみましたが、同じ結果が得られました。Resharper を使用して API ソース コードを掘り下げると、Directory.GetFiles の .NET 3.5 と 4.5 のバージョンがまったく異なることがわかります。

特に、.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 に答える