6

よくわからない文字を含むディレクトリをスキャンするにはどうすればよいか考えていました。

たとえば、スキャンしたい

C:\Program\Version2.*\Files

意味

  • フォルダは次の場所にあります。C:\Program
  • Version2.*Version2.33Version2.1など のようなものです。
  • そのフォルダには、その中に名前の付いたフォルダがありFilesます

のようなことができることは知っていますforeach (directory) if contains("Version2.")が、より良い方法があるかどうか疑問に思っていました。

4

2 に答える 2

7

Directory.EnumerateDirectoriesは検索パターンを受け入れます。したがって、ワイルドカードを持つ親を列挙し、残りを列挙します。

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

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

于 2012-12-11T07:35:47.670 に答える
1

これを試して

var pattern = new Regex(@"C:\\Program\\Version 2(.*)\\Files(.*)");

var directories = Directory.EnumerateDirectories(@"C:\Program", "*", 
                                                 SearchOption.AllDirectories)
                                                .Where(d => pattern.IsMatch(d));
于 2012-12-11T07:39:00.727 に答える