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

C#如何基于修改日期从指定路径获取最新的AMCR_Handoff_Report文件

C# 高效获取指定目录下匹配命名规则的最新文件方案

前置问题修正

首先排查现有代码的两个隐性问题:

  • 搜索模式存在笔误:目标文件前缀为AMCR_Handoff_Report_,但代码中写的是AMCAR_Handoff_Report_,多了字母A,会导致匹配不到正确文件
  • 方法参数错误:Directory.GetFiles第一个参数需传入目标目录的纯路径,不需要带文件名,你当前参数名amcrNDMPathWithFileName说明可能传了带文件名的路径,会导致搜索路径错误

方案1:基于文件修改时间筛选(推荐,符合需求)

使用Directory.EnumerateFiles替代Directory.GetFiles,前者为延迟加载机制,不需要一次性把所有文件路径加载到内存,文件数量较多时内存占用远低于原有方案,配合LINQ可以快速筛选出最新文件:

using System.IO;
using System.Linq;

// amcrNDMPath 为文件存储目录的纯路径
var latestFile = Directory.EnumerateFiles(amcrNDMPath, "AMCR_Handoff_Report_*", SearchOption.TopDirectoryOnly)
    .Select(f => new FileInfo(f))
    .OrderByDescending(fi => fi.LastWriteTime)
    .FirstOrDefault();

// 判空后即可使用,文件路径为 latestFile.FullName
if (latestFile != null)
{
    // 业务处理逻辑
}

如果只需要获取文件路径,可以简化为:

var latestFilePath = Directory.EnumerateFiles(amcrNDMPath, "AMCR_Handoff_Report_*", SearchOption.TopDirectoryOnly)
    .OrderByDescending(f => File.GetLastWriteTime(f))
    .FirstOrDefault();

方案2:基于文件名日期解析筛选(性能更高,适合文件名日期完全可靠的场景)

你的文件命名中日期为固定的ddMMyyyy格式,直接解析文件名日期不需要读取文件系统属性,文件量极大时性能更高,适合可以保证文件名日期完全准确、不会被人为修改的场景:

using System.IO;
using System.Linq;
using System.Globalization;

var latestFile = Directory.EnumerateFiles(amcrNDMPath, "AMCR_Handoff_Report_*", SearchOption.TopDirectoryOnly)
    .Select(f => new {
        Path = f,
        DatePart = Path.GetFileNameWithoutExtension(f).Split('_').Last()
    })
    // 过滤掉不符合命名规则的文件
    .Where(x => DateTime.TryParseExact(x.DatePart, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _))
    .OrderByDescending(x => DateTime.ParseExact(x.DatePart, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None))
    .FirstOrDefault();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:42:02