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

时间:2019-02-18 08:19:19

标签: c#

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

我正在获取这样的目录路径:

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

如何更好地做到这一点,以便在没有较长路径的所有多余字符的情况下轻松地更新数组?示例:将来添加其他路径以排除。

2 个答案:

答案 0 :(得分:1)

我认为这应该很好:

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

我已经测试过了。 请注意,正在使用的Containsexclude相反-因此,这是在检查Name是否在数组中,而不是在进行某种形式的子字符串搜索。


更强大一点可能值得使用:

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

答案 1 :(得分:0)

您必须更改SearchPattern,例如:

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

所有A and B已被排除