如何在使用 GetFiles() 时排除某些文件

How to exclude certain files while using GetFiles()

我有一个包含 2 个子文件夹的文件夹,每个子文件夹包含大约 1000 个文件。文件如下所示:

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

我想要 3 个单独的阵列 - 我已经拥有其中 2 个。

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

我认为这可行。

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

现在您要确保文件不以 _T.ygx AND ALSO _B.ygx

结尾

简单获取所有文件。基于扩展,然后使用 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 集合并且可以分派到正确的进程