你可以试试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);
编辑:让我们达成协议。我们有根目录(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