2016-03-22 3 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

Затем вы можете сменить концы на Содержит. –

Смежные вопросы