Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用Directory.GetDirectories时排除文件夹_C#_Asp.net_Linq_Getdirectories - Fatal编程技术网

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

C# 如何在使用Directory.GetDirectories时排除文件夹,c#,asp.net,linq,getdirectories,C#,Asp.net,Linq,Getdirectories,我想返回“SomeFolder”目录中所有子目录的列表,不包括“Admin”和“Templates”目录 我有以下文件夹结构(简化): “SomeFolder”可以包含数量不等的“RandomString”文件夹(从~10到~100之间的任意位置) 以下是我尝试过的: var dirs = Directory.GetDirectories(Server.MapPath("..")) .Where(s => !s.EndsWith("Admin") || !s.EndsWit

我想返回“SomeFolder”目录中所有子目录的列表,不包括“Admin”和“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过滤掉目录?

与(A | | B)相反的是(!A&&!B),因此在代码中应该是&,而不是| |……

您可以执行以下操作:

//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));
//列出排除的目录
私有列表_excludedDirectories=new List(){“Admin”,“Templates”};
//检查方法
静态布尔值已排除(列表排除dirlist,字符串目标)
{
返回exludedDirList.Any(d=>newDirectoryInfo(target.Name.Equals(d));
}
//那就用这个
var filteredDirs=Directory.GetDirectories(path).Where(d=>!isExcluded(_excludedDirectories,d));

是的,就是这样。谢谢真是个新手犯的错误。我甚至(显然太快)查看了C#operators引用,以确保我应该使用条件而不是逻辑。当10分钟窗口打开时,我将接受。哇,令人惊讶的是,当我搜索这个时,我发现了。和我的非常相似。这是一种很好的清洁溶液。我正在做一个完整的服务器。您认为如果我不使用DirectoryInfo和字符串操作,性能会更好吗。IE tagert.EndWith(d)@H20rider,显著提升性能?不,我不这么认为。绝对是最好的答案!选择的答案适用于本例,但如果您需要添加/删除文件夹,而无需创建一个巨大的&&&&&&|&&concat
,则此解决方案干净且易于维护。其中(it=>!ExcludedFolders.Any(it.Contains))
private IEnumerable ExcludedFolders{get;}=new[]{“Admin”,“Templates”}
//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));