Win7 文件访问时间和修改时间不一样的原因分析
来源:互联网 发布:多元线性回归模型 数据 编辑:程序博客网 时间:2024/05/01 16:57
在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
- Win7 文件访问时间和修改时间不一样的原因分析
- 详解win7中的文件属性“访问时间”和“修改时间”不一致的原因分析 【原来LastAccessTime早就没用了】
- 文件的大小、创建时间、修改时间和访问时间
- 修改文件的访问时间和修改时间为当前的时间
- C++ win环境修改文件创建时间、最后的修改时间和最后的访问时间
- PHP获取文件的修改时间、访问时间和inode 修改时间
- 修改文件“访问和修改时间”
- 文件的创建时间 \修改时间 \访问时间
- C# 获取文件的修改时间、访问时间、创建时间
- C# 获取文件的修改时间、访问时间、创建时间
- C# 获取文件的修改时间、访问时间、创建时间
- FILETIME使用,获取文件的创建时间,修改时间和访问时间
- java获取文件的创建时间、修改时间和访问时间(含优化)
- java获得文件的创建和最后访问修改时间
- Linux 下修改文件的访问时间和修改时间属性
- nodejs-修改文件访问时间、修改时间
- 获取文件的“创建”、“修改”、“访问”时间
- 在不更改访问时间和修改时间的前提下截断文件
- 使VC控制台暂停的办法
- HTML -- 入门篇
- 基于postgreSQL9.1的中文全文检索(基于Linux)
- 关于CStringArray的运用方法
- Android ViewPager多页面滑动切换以及动画效果
- Win7 文件访问时间和修改时间不一样的原因分析
- java 读取EXECL信息 经典入门
- twisted系列教材一异步编程
- 建筑者模式
- ORACLE 之 rman 备份加密
- Android 常用代码集合
- Iterator迭代器模式
- Hibernate中原生sql查询多个表,数据映射
- 友元函数 友元类