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

本文关键字:GetDirectories 排除 文件夹 Directory | 更新日期: 2023-09-27 18:18:00

我想返回'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;
    }

这将返回未过滤掉'Admin'和'Templates'的完整文件夹列表(如上所示)。

有趣的是,如果我将LINQ .Where子句更改为包括,而不是排除, 'Admin'和'Templates',它会工作,这意味着它只返回'Admin'和'Templates'的路径。
.Where(s => s.EndsWith("Admin") || s.EndsWith("Templates"));

如果LINQ不是解决方案,是否有任何方法使用GetDirectories SearchPattern来过滤掉目录?

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

你可以这样做:

//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));

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