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

如何通过文件创建时间查询对应文件名?C#实现方法解答

基于文件创建时间查询文件名的实现方案

需求可行性

该需求完全可实现。文件系统会为每个文件存储创建时间元数据,C#可通过官方内置的IO类直接读取该属性,与目标时间匹配后即可筛选出对应文件。
注意:同一时间可能存在多个创建时间完全一致的文件,因此查询结果通常为一个集合,而非单个文件名。

C#具体实现方法

核心依赖

使用.NET内置的System.IO命名空间下的DirectoryInfo、FileInfo类即可完成需求,无需引入第三方库。

完整实现代码

using System;
using System.IO;
using System.Collections.Generic;

public static class FileSearchTool
{
    /// <summary>
    /// 根据指定的UTC创建时间搜索对应文件
    /// </summary>
    /// <param name="searchDirectory">要搜索的根目录路径</param>
    /// <param name="targetCreationTimeUtc">目标创建时间(UTC格式)</param>
    /// <param name="searchSubdirectories">是否递归搜索子目录</param>
    /// <returns>匹配到的文件路径/文件名集合</returns>
    public static List<string> SearchFilesByCreationTime(string searchDirectory, DateTime targetCreationTimeUtc, bool searchSubdirectories = false)
    {
        List<string> matchedFiles = new List<string>();

        // 目录合法性校验
        if (!Directory.Exists(searchDirectory))
        {
            throw new DirectoryNotFoundException($"搜索目录不存在:{searchDirectory}");
        }

        try
        {
            DirectoryInfo rootDir = new DirectoryInfo(searchDirectory);
            SearchOption option = searchSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
            FileInfo[] allFiles = rootDir.GetFiles("*", option);

            foreach (FileInfo file in allFiles)
            {
                // 可根据需求调整时间匹配精度,以下为完全匹配
                if (file.CreationTimeUtc == targetCreationTimeUtc)
                {
                    // 若只需文件名不要完整路径,替换为 file.Name
                    matchedFiles.Add(file.FullName);
                }
            }
        }
        catch (UnauthorizedAccessException)
        {
            Console.WriteLine("部分目录无访问权限,已跳过");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"搜索出错:{ex.Message}");
        }

        return matchedFiles;
    }

    // 调用示例
    public static void Main()
    {
        // 替换为实际搜索目录
        string searchPath = @"D:\MyFiles";
        // 替换为实际的目标创建时间,必须指定为UTC类型
        DateTime targetTime = new DateTime(2024, 1, 1, 10, 0, 0, DateTimeKind.Utc);

        List<string> results = SearchFilesByCreationTime(searchPath, targetTime, true);

        Console.WriteLine(results.Count > 0 ? "匹配到的文件:" : "未找到符合条件的文件");
        results.ForEach(f => Console.WriteLine(f));
    }
}

注意事项

  • 推荐统一使用UTC时间做匹配,避免本地时区切换、夏令时调整导致的匹配误差,如果你的目标时间是本地时间,可将属性替换为file.CreationTime
  • 若不需要精确到秒的匹配,可将时间判断逻辑调整为允许误差范围,例如允许前后1秒误差:
    if (Math.Abs((file.CreationTimeUtc - targetCreationTimeUtc).TotalSeconds) <= 1)
    
    可避免文件系统时间存储精度不足导致的漏匹配
  • 若搜索目录下文件数量极多,可使用Directory.EnumerateFiles替代GetFiles做流式遍历,降低内存占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:01