2012-12-11 8 views
5

よく分からない文字が含まれているディレクトリをスキャンするにはどうすればよいでしょうか。特定のサブディレクトリを持つワイルドカードを使用してディレクトリをスキャンする方法

は例えば、私は

Cスキャンする:\プログラム\バージョン2を* \ファイルフォルダがC:\Program

  • Version2.*に位置しています

    • 意味

  • Version2.33Version2.1などとなります。

  • フォルダが
  • それにFilesという名前のフォルダを持っていることを私はforeach (directory) if contains("Version2.")のような何かができることを知っているが、そうすることのより良い方法があった場合、私は思っていました。

    +0

    を試してみてくださいあなたは[Directory.GetFiles機能](http://msdn.microsoft.com/en-us/library/wz42302f.aspx)を試したことがありますか?そのディレクトリに複数のディレクトリが含まれているかどうかはわかりませんが、ワイルドカードとして '* 'が付いています – Default

    +0

    可能な複製:http://stackoverflow.com/questions/7286477/possible-to-specify-directory-path-with-a-a-ワイルドカード – Default

    +0

    @Default、その答えは、この質問にあるように中間ではなく、パスの最後にワイルドカードがあるときに便利です。 –

    答えて

    6

    Directory.EnumerateDirectoriesは検索パターンを受け入れます。だから、ワイルドカードを持つ親を列挙し、残り列挙するより:

    var directories = 
        Directory.EnumerateDirectories(@"C:\Program\", "Version2.*") 
        .SelectMany(parent => Directory.EnumerateDirectories(parent,"Files")) 
    

    注:パスは、任意のレベルでワイルドカードを含めることができる場合 - 単にパスを正規化し、「\」によって分割、レベルによってフォルダレベルを収集するよりも。

    +0

    GetDirectoriesではなくEnumerateDirectoriesを使用する理由はありますか? – Default

    +2

    @Default EnumerateDirectoriesは遅延評価を使用するため、多数のファイル/フォルダの方が高速になる場合があります(MSDN [link](http://msdn.microsoft.com/en-us/library/dd383572(v=vs) .100).aspx)) –

    +0

    これは現在私が探しているものに最も適しているようです(: 私はそれをすぐに試してみます)ありがとう! –

    1

    この

    var pattern = new Regex(@"C:\\Program\\Version 2(.*)\\Files(.*)"); 
    
    var directories = Directory.EnumerateDirectories(@"C:\Program", "*", 
                   SearchOption.AllDirectories) 
                   .Where(d => pattern.IsMatch(d)); 
    
    +0

    +1、働くかもしれませんが、後でフィルタリングする。 –

    +0

    あなたはもちろん、私の答えにフィルタリングを加えました –

    関連する問題