2016-03-22 16 views
0

特定のフォルダ内の特定のファイル拡張子を持つすべてのファイルを検索していますが、検索対象外のサブディレクトリを除外したいとします。私は、ファイルの拡張子については、以下のコードを書いたが、folders.DirListを除外する方法を知らないフォルダは、私はこれは少しナイーブですが、仕事をしていません検索ファイル検索からディレクトリを除外する

void DirSearch(string sDir) 
    { 
     List<string> DirList = new List<string>(); 
     DirList.Add("Combustor"); 
     DirList.Add("INLET"); 

     string[] extensions = { ".c", ".h", ".isi", ".isc", ".xml", ".sheet" }; 

     foreach (string file in Directory.EnumerateFiles(
       sDir, "*.*", SearchOption.AllDirectories).Where(s => extensions.Any(ext => ext == Path.GetExtension(s)))) 
     { 
      UpdaterUtility.UpdateFile(file); 

     } 
    } 

答えて

0

から除外するされています

void DirSearch(string sDir) 
{ 
    List<string> DirList = new List<string>(); 
    DirList.Add("Combustor"); 
    DirList.Add("INLET"); 

    string[] extensions = { ".c", ".h", ".isi", ".isc", ".xml", ".sheet" }; 

    foreach (string file in Directory.EnumerateFiles(
      sDir, "*.*", SearchOption.AllDirectories) 
    .Where(s =>!DirList.Any(d => s.StartsWith(d, StringComparison.InvariantCultureIgnoreCase)) 
    && extensions.Any(ext => ext == Path.GetExtension(s)))) 
    { 
     UpdaterUtility.UpdateFile(file); 

    } 
} 

なぜそれは素朴ですか:まず、無視されたディレクトリ内のすべてのファイルを列挙します。不要なファイルの数が必要なファイルの数よりもはるかに多い場合は、不要な処理を行います。

0

不幸にも、特定のディレクトリをフィルタリングする組み込みの方法はありません。だからこの検索を再帰的に行う必要があります:

void DirSearch(string sDir) 
{ 
    List<string> DirList = new List<string>(); 
    DirList.Add("Combustor"); 
    DirList.Add("INLET"); 

    string[] extensions = { ".c", ".h", ".isi", ".isc", ".xml", ".sheet" }; 

    // enumerate only files in this directory (no sub directories) 
    foreach (string file in Directory.EnumerateFiles(
      sDir, "*.*", SearchOption.TopDirectoryOnly).Where(s => extensions.Any(ext => ext == Path.GetExtension(s)))) 
    { 
     UpdaterUtility.UpdateFile(file); 
    } 

    // now recurse the subdirectories 
    foreach (string subdir in Directory.GetDirectories(
      sDir, "*", SearchOption.TopDirectoryOnly). 
     Where(sd => sd != "." && sd != ".." && !DirList.Contains(sd))) 
    { 
     DirSearch(Path.Combine(sDir, subdir)); 
    } 
} 
1

ここに行きます!除外されたdirがパスの最後の部分であるかどうかをチェックするだけです。また、ディレクトリ名の先頭にバックスラッシュ「\」を含めます。

void DirSearch(string sDir) 
{ 
    List<string> DirList = new List<string>(); 
    DirList.Add("\\Combustor".ToUpper()); 
    DirList.Add("\\INLET".ToUpper()); 

    string[] extensions = { ".c", ".h", ".isi", ".isc", ".xml", ".sheet", ".txt" }; 

    foreach (string file in Directory.EnumerateFiles(sDir, "*.*", SearchOption.AllDirectories) 
            .Where(s => !DirList.Any(d => Path.GetDirectoryName(s).ToUpper().Contains(d)) && extensions.Any(ext => ext == Path.GetExtension(s)))) 
    { 
     Console.WriteLine(file); 

    } 
} 
+0

除外ディレクトリはその後、あなたが含まれていにして両端を変更することができ、サブディレクトリ –

+1

が含まれている場合は除外されたディレクトリに移動します。 –

関連する問題