我需要从目录获取完整路径,但要使用数组来排除某些路径,而不必将完整路径输入到数组中。
我正在获取这样的目录路径:
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);
如何更好地做到这一点,以便在没有较长路径的所有多余字符的情况下轻松地更新数组?示例:将来添加其他路径以排除。
答案 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();
我已经测试过了。 请注意,正在使用的Contains
与exclude
相反-因此,这是在检查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
已被排除