如何用C#筛选文件名编号≥6的SQL文件并按升序排列?
解决方法:提取文件名前缀数字并过滤≥6的SQL文件
你的问题出在原代码只判断文件名是否以"6"开头,这自然拿不到7、8或者11这类数字开头的文件。我们需要先从文件名里提取开头的连续数字,再判断这个数字是否≥6,同时还要处理多位数和非数字开头的情况。
这里是修正后的代码:
var files = Directory.EnumerateFiles(SQLScriptsFolderPath, "*.sql") // 先包装文件路径和文件名,方便后续处理 .Select(file => new { FilePath = file, FileName = Path.GetFileName(file) }) // 提取文件名开头的数字并转换为整数 .Select(x => { // 取文件名开头的所有连续数字字符 var prefixDigitStr = new string(x.FileName.TakeWhile(char.IsDigit).ToArray()); // 尝试转换为整数,失败则设为-1(后续会被过滤) var isValidNumber = int.TryParse(prefixDigitStr, out int prefixNum); return new { x.FilePath, x.FileName, PrefixNumber = isValidNumber ? prefixNum : -1 }; }) // 过滤出前缀数字≥6的文件 .Where(item => item.PrefixNumber >= 6) // 按前缀数字升序排列,确保6_q、7_q、8_q、11qq.sql按数字顺序处理 .OrderBy(item => item.PrefixNumber) // 最终返回文件路径列表 .Select(item => item.FilePath) .ToList();
关键细节说明:
- 提取数字前缀:不管数字后面跟了什么字符(比如
_q、qq),我们只拿文件名最开头的连续数字,确保能识别6_q.sql、11qq.sql这类格式。 - 容错处理:如果遇到不是数字开头的SQL文件(比如
abc.sql),转换会失败,这类文件会被自动过滤掉,不会影响正常逻辑。 - 排序优化:按数字大小排序而不是文件名排序,避免出现
10_q.sql排在6_q.sql前面的尴尬情况,完全符合你"从6_q.sql开始按升序处理"的要求。
这样修改后,你的代码就能正确获取所有文件名前缀数字≥6的SQL文件,并且按数字升序排列,满足执行失败后重新从6_q.sql开始处理的需求。
内容的提问来源于stack exchange,提问作者SQLLearner
相关产品推荐
相关产品推荐

