繁体   English   中英

如何根据数组值排除子目录

[英]How to exclude sub directories based on array values

我需要从目录中获取完整路径,但使用数组来排除某些路径而不将完整路径输入到数组中。

我得到这样的目录路径:

List<string> dirs = di.GetDirectories("vault*", SearchOption.AllDirectories)
.Select(x => x.FullName).ToList();

该目录如下所示:我需要根据 C 之后的父级进行过滤。

C:\A\vault
C:\B\vault
C:\C\vault

我有一个这样的数组:

string[] exclude = new string[] {"A", "B"};

执行以下操作不起作用,因为它需要我输入要在数组中排除的路径的全名,这可能会令人讨厌:

dirs.Except(exclude);

我怎样才能更好地做到这一点,以便我可以轻松地更新数组,而无需更长路径的所有无关字符? 示例:在将来添加要排除的其他路径。

我认为这应该可以正常工作:

string[] exclude = new string[] { "A", "B" };

List<string> dirs =
    di
        .GetDirectories("vault*", SearchOption.AllDirectories)
        .Where(x => !exclude.Contains(x.Name))
        .Select(x => x.FullName)
        .ToList();

我已经测试过了。 请注意,使用的Contains是针对exclude ——因此这是检查Name是否存在于数组中,而不是进行某种形式的子字符串搜索。


为了更健壮,可能值得使用这个:

.Where(x => !exclude.Select(y => y.ToUpperInvariant()).Contains(x.Name.ToUpperInvariant()))

您必须将SearchPattern更改为:

 List<string> dirs = di.GetDirectories("C\\Vault*", SearchOption.AllDirectories)
           .Select(x => x.FullName).ToList();

所有A and B已被排除

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM