2013-02-16 8 views
9

WPFアプリケーションに次の行を追加すると、私はいくつかの奇妙な問題があります。Directory.GetFiles()は "。"のパターンでは動作しません。

private void button1_Click(object sender, RoutedEventArgs e) 
{ 

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

} 

事がFrameworkの3.5上記の方法は何も、いなくてもエラーもしないということですが、私はフレームワークのそれを変更した場合4.5 は、それが動作します!また、私はFramework 3.5のを使用して、この

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

コードのようにConsolAppにそれを変更していた場合には、いくつかの結果を与えます。

誰も同じ問題がありますか?

+0

正しい検索パターンは "\ *。\ *"である必要があります。あなたのコードには "\ *。\ *"が含まれていますが、このサイトは\ *を何も置き換えませんでした。 (私はこのコメントを書いたときにこの問題を抱えていました)。その場合、私はその問題が何であるか分かりません。 \\ *を書いてください。\\ * – Casperah

+0

あなたのタイトルを編集しました。 「[質問には「タイトル内に「タグ」を含める必要がありますか」(http://meta.stackexchange.com/questions/19190/)」を参照してください。コンセンサスは「いいえ、そうすべきではありません」です。 –

答えて

11

私はこれを試して同じ結果を得ました。 Resharperを使ってAPIソースコードを掘り下げれば、Directory.GetFileの.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では動作しません。

互換性のために '*'または '*。*'を使用する必要があります。

+1

好奇心と完全性から:4.0はどうですか? – JustAnotherUserYouMayKnow

+2

'。' 4.0でも動作します。 – Phil

+4

+1。私は "を使用しないでください。" Windowsでは "。"通常は "現在のdierctory"( ".."は親です)を意味するので、私は個人的には "現在のディレクトリ"のパターンが "指定されたフォルダ内のすべてのファイル"を意味する理由は見当たりません。私はほとんどの人が 'GetFiles'を"。パターンとして。 –

関連する問題