簡體   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