Отображение имени каталога или каталогов, которые не имеют указанного файла - PullRequest
0 голосов
/ 04 марта 2020

У меня есть основная папка, в которой есть набор подкаталогов. каждый из этих подкаталогов должен иметь файл с именем app.config. Я написал метод, который будет сканировать каталог и получать путь ко всем папкам, в которых есть этот файл, но я хочу написать в консоли имя подкаталоги, у которых нет этого файла

возможно ли получить такое поведение с помощью этой реализации?

мой код такой, как показано ниже

private void ValidateFiles(string path)
{
    var filesindirectory = new List<string>(Directory
      .GetFiles(path, "app.config", SearchOption.AllDirectories));

    foreach (var file in filesindirectory)
    {
        Console.WriteLine(file);
    }
}

1 Ответ

3 голосов
/ 04 марта 2020

Вы можете попробовать Linq : мы хотим все каталоги, чтобы у них не было app.config файла:

 using System.IO;
 using System.Linq;

 ...

 List<string> dirs = Directory
    .EnumerateDirectories(path, "*", SearchOption.AllDirectories)
    .Where(dir => !File.Exists(Path.Combine(dir, "app.config")))
    .ToList(); // If we want to have a list of such directories

В случае, если вы хотите просто для записи каталогов:

 var dirs = Directory
    .EnumerateDirectories(path, "*", SearchOption.AllDirectories)
    .Where(dir => !File.Exists(Path.Combine(dir, "app.config")));

 foreach (string directory in dirs)
   Console.WriteLine(directory);

Редактировать: Придем к соглашению. У нас есть каталог root (path) с подкаталогами, которые могут иметь файл app.config:

    C: 
      \Root # == path
        \SubDir1
          app.config
        \SubDir2
          app.config
          \SubSubDir2_1
            app.config
          \SubSubDir2_2
        \SubDir3
          readme.txt
          \SubSubDir3_1
            settings.xml 
        \SubDir4
          \SubSubDir4_1
            app.config

Приведенный выше код возвращает все подкаталоги (включая вложенные), в которых нет app.config :

     C:\Root\SubDir2\SubSubDir2_1
     C:\Root\SubDir3
     C:\Root\SubDir3\SubSubDir3_1
     C:\Root\SubDir4

Если вы хотите, скажем, подкаталоги верхнего уровня (SubDir1..SubDir4), у которых нет app.config внутри них или в их собственных подкаталогах:

 var dirs = Directory
   .EnumerateDirectories(path)
   .Where(dir => !Directory
      .EnumerateFiles(dir, "app.config", SearchOption.AllDirectories)
      .Any()); 

и у нас будет

     C:\Root\SubDir3

только потому, что ни SubDir3, ни его подкаталоги (SubSubDir3_1) не содержат app.config

...