为何更新目录内文件时,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
相关产品推荐
相关产品推荐

