4

我想返回“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子句更改为include,而不是exclude, 'Admin' 和 'Templates' 它可以工作,这意味着它只返回 'Admin' 和 'Templates' 的路径。

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

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

4

2 回答 2

8

(A || B) 的反义词是 (!A && !B),所以在你的代码中它应该是 &&,而不是 ||...

于 2013-06-11T04:15:43.797 回答
8

您可以执行以下操作:

//list your excluded dirs
private List<string> _excludedDirectories= new List<string>() { "Admin", "Templates" };

//method to check
static bool isExcluded(List<string> 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));
于 2013-06-11T04:21:04.253 回答