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

为何更新目录内文件时,Directory.GetLastWriteTime返回时间未变化?

为什么修改目录内现有文件时,目录的最后写入时间不更新?

问题场景

我使用File.GetLastWriteTime()方法获取指定目录的最后写入日期时间时遇到了问题,相关代码如下:

// ‘path’ 是需要获取修改日期时间信息的目录路径
DateTime dtp = File.GetLastWriteTime(path);
DateTime dtf = File.GetLastWriteTime(path+@"\log.txt");

Console.WriteLine($"{path}, dir: {dtp:hh:mm:ss.fff}, file: {dtf:hh:mm:ss.fff}");

当通过命令提示符执行以下操作更新log.txt文件内容时:

echo some-text >> "log.txt"

文件的最后写入时间(dtf)会正常更新,但目录的最后写入时间(dtp)完全没有变化。只有在目录内创建新文件或删除现有文件时,目录的日期时间才会改变。使用Directory.GetLastWriteTime()方法也会出现同样的问题。

环境说明:

  • 操作系统:Windows 10
  • 未应用过相关注册表修复

原因解释

这是Windows文件系统的原生设计行为,和.NET的API无关:

  • Windows目录的元数据(包括最后写入时间)仅在目录的结构发生变更时才会更新,触发场景包括:
    • 在目录内创建、删除文件或子目录
    • 重命名目录内的文件或子目录
    • 修改文件的属性(如只读、隐藏标记)
  • 仅修改现有文件的内容时,变动的是文件自身的元数据和数据内容,并不会改变目录记录的文件条目信息(比如文件名、索引指针等),因此目录的最后写入时间不会随之更新。

.NET的File.GetLastWriteTime()和Directory.GetLastWriteTime()方法本质是调用Windows底层系统API,所以会直接反映Windows文件系统的这一设计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:55:24