Win7 文件访问时间和修改时间不一样的原因分析

本文探讨了Windows 7系统中文件属性中的访问时间和修改时间不一致的现象,并解释了LastAccessTime默认被禁用的原因及其对性能的影响。

在Win7下,我注意到一个现象,就是经常文件属性中的“访问时间”和“修改时间”是不一致的,如下图:

这个文件是我在21:41 创建的,然后我在21:42修理里面的内容并保存。按照常理,访问时间应该和修改时间一致才对。现象是反而比修改时间早,很奇怪。

根据GetFileTime这个API,和文件相关的时间有3个:

BOOL WINAPI GetFileTime(
  __in       HANDLE hFile,
  __out_opt  LPFILETIME lpCreationTime,
  __out_opt  LPFILETIME lpLastAccessTime,
  __out_opt  LPFILETIME lpLastWriteTime
);CreationTime:创建时间,很好理解,就是这个文件创建时的时间。

LastAccessTime:最后访问时间,表示文件读取,写入,复制或者执行的最后时间.

LastWriteTime:  文件最后写入的时间。

从这个定义来看的话,LastAccessTime应该大于等于LastWriteTime.但是从使用来看的话,却又不是这样的。

Why?
今天看了The Old New Thing才明白过来,原来从2003 SP1起,为了性能,默认把LastAccessTime给禁用了。

我使用的是Win7系统,默认是关闭的。

那么它为什么会影响性能呢?
LastAccessTime会保存到两个地方:

文件属性中,作为MFT中的一条记录
该文件所属的目录索引中。
影响性能的主要原因是如果一个文件只是读操作的话,为了更新这个时间,就必须做一个写操作,把该信息写入到文件属性和目录索引中去,这样一个读操作就变成了一个读+写操作。由于现在的硬盘都非常大,几十万个文件都是常事,如果读操作再加一个写操作,那么这个确实影响性能。(详细可以参考Fsutil: behavior 中对于DisableLastAccess的描述,地址附后)。

下面是各个文件系统对文件时间的支持文档:

Feature NTFS exFAT UDF FAT32
Creation time stamps(创建时间) Yes Yes Yes Yes
Last access time stamps(最后访问时间) No* Yes Yes Yes (只更新日期)
Last change time stamps(最后改变时间) Yes Yes Yes Yes
Last archive time stamps(最后存档时间) No No No No

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值