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

使用Directory.GetFiles筛选含YYYYMMDD_HHMMSS格式日期的文件问题

解决方法:用正则表达式精准筛选文件名

这个问题我之前也碰到过,Directory.GetFiles()自带的通配符(*、?)确实满足不了这种精准的日期格式筛选需求——它只能做简单的模糊匹配,没法验证字符类型(比如必须是数字)和格式规则(比如8位日期、6位时间)。下面给你两个可行的解决方案:

方案1:仅匹配格式(不验证日期有效性)

如果只需要确保文件名包含_8位数字_6位数字的结构,不需要验证日期是否真实合法(比如不会出现20241301这种不存在的日期),可以用这个简单的实现:

using System.IO;
using System.Text.RegularExpressions;
using System.Linq;

// 替换成你的目标目录路径
string targetDirectory = @"C:\Your\Target\Folder";

// 正则规则:匹配任意字符开头,后跟_8位数字_6位数字,再后跟任意字符(包括扩展名)
Regex fileNamePattern = new Regex(@"^.*_\d{8}_\d{6}.*$", RegexOptions.IgnoreCase);

// 获取所有文件并筛选符合格式的
var matchingFiles = Directory.GetFiles(targetDirectory)
    .Where(filePath => fileNamePattern.IsMatch(Path.GetFileName(filePath)))
    .ToList();

// 遍历输出结果
foreach (var file in matchingFiles)
{
    Console.WriteLine($"符合格式的文件:{file}");
}

方案2:匹配格式+验证日期有效性

如果需要确保文件名中的日期是真实有效的(比如MM不会超过12、DD不会超过当月天数),可以在筛选时额外添加日期验证逻辑:

using System.IO;
using System.Text.RegularExpressions;
using System.Linq;
using System.Globalization;

string targetDirectory = @"C:\Your\Target\Folder";
Regex fileNamePattern = new Regex(@"^.*_\d{8}_\d{6}.*$", RegexOptions.IgnoreCase);

var matchingFiles = Directory.GetFiles(targetDirectory)
    .Where(filePath =>
    {
        string fileName = Path.GetFileName(filePath);
        // 先检查格式是否匹配
        if (!fileNamePattern.IsMatch(fileName))
            return false;

        // 提取文件名中的日期字符串(YYYYMMDD部分)
        int dateStartPos = fileName.IndexOf('_') + 1;
        string dateStr = fileName.Substring(dateStartPos, 8);

        // 尝试转换为DateTime,验证日期有效性
        return DateTime.TryParseExact(
            dateStr, 
            "yyyyMMdd", 
            CultureInfo.InvariantCulture, 
            DateTimeStyles.None, 
            out _);
    })
    .ToList();

foreach (var file in matchingFiles)
{
    Console.WriteLine($"格式合法且日期有效的文件:{file}");
}

为什么不用Directory.GetFiles的搜索模式?

比如你可能会尝试用*_????????_??????.*这样的通配符,但它会匹配任何8个字符+6个字符的组合(比如_ABCDEFGH_JKLMNO.txt),无法区分数字和其他字符,筛选精度完全达不到要求,所以正则表达式是更可靠的选择。

内容的提问来源于stack exchange,提问作者Merendandum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:14:40