Вы можете попробовать 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