[英]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.