如何在使用 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 集合并且可以分派到正确的进程
我有一个包含 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 集合并且可以分派到正确的进程