You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:13:10