如何在使用Directory.GetDirectories时排除文件夹

我想返回’SomeFolder’目录中所有子目录的列表, 不包括 ‘Admin’和’Templates’目录。

我有以下文件夹结构(简化):

C:\inetpub\wwwroot\MyWebsite\SomeFolder\RandomString C:\inetpub\wwwroot\MyWebsite\SomeFolder\RandomString C:\inetpub\wwwroot\MyWebsite\SomeFolder\RandomString C:\inetpub\wwwroot\MyWebsite\SomeFolder\Admin C:\inetpub\wwwroot\MyWebsite\SomeFolder\Templates 

‘SomeFolder’可以包含不同数量的’RandomString’文件夹(大约从10到100)。

这是我尝试过的:

  var dirs = Directory.GetDirectories(Server.MapPath("..")) .Where(s => !s.EndsWith("Admin") || !s.EndsWith("Templates")); foreach (string dir in dirs) { lit.Text += Environment.NewLine + dir; } 

这将返回完整的文件夹列表(如上所示),而不会过滤掉“管理员”和“模板”。

有趣的是,如果我更改LINQ .Where子句以包含 ,而不是排除 ,“管理”和“模板”它可以工作,这意味着它只返回“管理”和“模板”的路径。

 .Where(s => s.EndsWith("Admin") || s.EndsWith("Templates")); 

如果LINQ不是解决方案,有没有办法使用GetDirectories SearchPattern过滤掉目录?

与(A || B)相反的是(!A &&!B),所以在你的代码中它应该是&&,而不是|| …

你可以这样做:

 //list your excluded dirs private List _excludedDirectories= new List() { "Admin", "Templates" }; //method to check static bool isExcluded(List exludedDirList, string target) { return exludedDirList.Any(d => new DirectoryInfo(target).Name.Equals(d)); } //then use this var filteredDirs = Directory.GetDirectories(path).Where(d => !isExcluded(_excludedDirectories, d));