C#获取目录下所有文件最新修改时间的简单实现方法
C# 获取指定目录下文件最新修改时间的简便实现
直接使用C#内置的System.IO和System.Linq即可快速实现,不需要依赖任何第三方组件。
基础实现(最简版本)
首先引入必要的命名空间:
using System.IO; using System.Linq;
如果只需要统计目标目录根级别的文件、不遍历子目录,用以下代码即可:
// 替换为实际要查询的目录路径 string targetDir = @"D:\你的目标目录路径"; // 获取所有文件中最新的最后修改时间 DateTime latestWriteTime = Directory.EnumerateFiles(targetDir) .Select(filePath => File.GetLastWriteTime(filePath)) .Max();
如果需要递归遍历目录下所有子文件夹的文件,给EnumerateFiles传入搜索参数即可:
DateTime latestWriteTime = Directory.EnumerateFiles( targetDir, "*", SearchOption.AllDirectories ) .Select(filePath => File.GetLastWriteTime(filePath)) .Max();
新手注意事项
- 优先用
EnumerateFiles而非GetFiles:前者会逐个返回文件路径,不会一次性把全量文件信息加载到内存,文件数量多的时候性能优势非常明显。 - 记得做异常兼容:如果目标目录不存在、程序运行账号没有部分文件/目录的访问权限,直接调用会抛出异常,正式使用建议加基础判断和容错:
string targetDir = @"D:\你的目标目录路径"; DateTime latestTime = DateTime.MinValue; try { if (!Directory.Exists(targetDir)) { Console.WriteLine("指定的目录不存在"); return; } latestTime = Directory.EnumerateFiles(targetDir, "*", SearchOption.AllDirectories) .Select(filePath => { try { return File.GetLastWriteTime(filePath); } catch { return DateTime.MinValue; } // 无权限访问的文件直接跳过 }) .Max(); Console.WriteLine($"目录下所有文件的最新修改时间为:{latestTime:yyyy-MM-dd HH:mm:ss}"); } catch (Exception ex) { Console.WriteLine($"读取目录信息出错:{ex.Message}"); }
扩展:同时获取最新修改的文件路径
如果你不仅需要拿到最新修改时间,还要定位到对应的文件,可以用匿名类封装信息后排序:
var latestFile = Directory.EnumerateFiles(targetDir, "*", SearchOption.AllDirectories) .Select(filePath => new { FullPath = filePath, LastWriteTime = File.GetLastWriteTime(filePath) }) .OrderByDescending(info => info.LastWriteTime) .FirstOrDefault(); if (latestFile != null) { Console.WriteLine($"最新修改的文件:{latestFile.FullPath}"); Console.WriteLine($"修改时间:{latestFile.LastWriteTime:yyyy-MM-dd HH:mm:ss}"); }
内容的提问来源于stack exchange,提问作者Lionel Hamayon
相关产品推荐
相关产品推荐

