我需要检查文件的上次访问时间。我使用'GetFileTime'来读取上次访问时间,请注意这需要文件handle
作为第一个参数。这意味着在我将句柄传递给GetFileTime
之前我需要创建句柄。所以我使用CreateFile(MyFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
因此,我没有得到与文件属性Accessed:
中看到的General Tab
相同的上次访问时间。这是预期的吗?或者我做错了什么?
相反,我上次最后一次右键单击该文件以检查其属性,但这不会影响Accessed:
属性中的General Tab
字段。
注意:我已在
windows server
中启用了上次访问时间更新。这个 代码是我的apache的authz模块(mod_authz.so)的一部分。启发我。
答案 0 :(得分:1)
由于我在这里没有得到快速回复,我在serverfault上发布了这个问题 - 答案得到了很好的解释。
这是来自doc的陈述。
并非所有文件系统都能记录创建和上次访问时间,并且 并非所有文件系统都以相同的方式记录它们。例如, 在FAT上创建时间的分辨率是10毫秒,而写入时间 分辨率为2秒,访问时间的分辨率为1 那天,所以它确实是访问日期。 NTFS文件系统延迟 更新到文件的最后访问时间最多1小时后 最后一次访问。
由此我觉得,除非您寻求更新一致性,否则不应依赖文件的最后访问时间。
我的经历:
但是,API
GetFileTime
或GetFileAttributesEx
确实提供了 你的预期输出。只是这不能从文件中可视化Properties
下的Accessed:
字段General tab
。我不知道这种行为的原因,这就是为什么我问这个问题。
答案 1 :(得分:0)
使用GetFileAttributesEx
检索文件上次访问时间。它采用文件名而不是HANDLE
。
BOOL WINAPI GetFileAttributesEx(
_In_ LPCTSTR lpFileName,
_In_ GET_FILEEX_INFO_LEVELS fInfoLevelId,
_Out_ LPVOID lpFileInformation
);