Как исключить определенные файлы при использовании GetFiles () - PullRequest
2 голосов
/ 07 октября 2019

У меня есть папка, содержащая 2 подпапки, каждая из которых содержит около 1000 файлов. Файлы выглядят следующим образом:

38485303_SARA_N211_T.ygx
38485303_SARA_N211_B.ygx
38208001_ULTI_CARTRI.ygx

из 100 уже * я хочу 3 отдельных из 1008 * я хочу 3 отдельных из 1008 * я хочу 3 отдельных из которых я хочу 3have.
 Array 1 = all files ending with "_T."
 Array 2 = all files ending with "_B."
 Array 3 = all files that dont end with _T or _B

Это то, что у меня есть для массивов 1 и 2.

files = Directory.GetFiles(folderPath, "*_T.*", SearchOption.AllDirectories);
files = Directory.GetFiles(folderPath, "*_B.*", SearchOption.AllDirectories);

И это то, что я пытался сформировать массив 3 без какого-либо успеха:

files = Directory.GetFiles(folderPath, ".ygx", SearchOption.AllDirectories).Where(file => !file.EndsWith("_T.ygx") || !file.EndsWith("_B.ygx")).ToArray();

Ответы [ 2 ]

4 голосов
/ 07 октября 2019

Я думаю, это может сработать.

files = Directory.GetFiles(folderPath, ".ygx", SearchOption.AllDirectories)
.Where(file => !file.EndsWith("_T.ygx") && !file.EndsWith("_B.ygx")).ToArray();

Теперь вы убедитесь, что файлы, которые не заканчиваются на _T.ygx AND ALSO _B.ygx

1 голос
/ 07 октября 2019

Просто получите все файлы. на основе расширения, а затем либо отфильтруйте их с помощью LinQ, либо перечислите их и действуйте согласно их названию.

var allFiles = Directory.GetFiles(folderPath, "*.ygx", SearchOption.AllDirectories);

var arraySuffixT = allFiles.Where( f=> f.EndsWith("_T.ygx")).ToArray();
var arraySuffixB = allFiles.Where( f=> f.EndsWith("_B.ygx")).ToArray();
var arrayNoSuffix = allFiles.Where(f=> !f.EndsWith("_T.ygx") && !f.EndsWith("_B.ygx")).ToArray();

Если вы хотите перечислить все файлы только один раз:

var listSuffixT = new List<string>();
var listSuffixB = new List<string>();
var listNoSuffix = new List<string>();

foreach(var file in allFiles){
    if(f.EndsWith("_T.ygx")){
        listSuffixT.Add(file);
    }
    else if(f.EndsWith("_B.ygx")){
        listSuffixB.Add(file);
    }
    else{
        listNoSuffix.Add(file);
    }

}

Но, возможно, вам не нужно материализовать 3 коллекции, и вы можете отправить в нужный процесс

...