“右键单击文件”会更新其上次访问时间吗?

时间:2016-12-22 04:21:09

标签: c++ apache window-server

我需要检查文件的上次访问时间。我使用'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)的一部分。启发我。

2 个答案:

答案 0 :(得分:1)

由于我在这里没有得到快速回复,我在serverfault上发布了这个问题 - 答案得到了很好的解释。

这是来自doc的陈述。

  

并非所有文件系统都能记录创建和上次访问时间,并且   并非所有文件系统都以相同的方式记录它们。例如,   在FAT上创建时间的分辨率是10毫秒,而写入时间   分辨率为2秒,访问时间的分辨率为1   那天,所以它确实是访问日期。 NTFS文件系统延迟   更新到文件的最后访问时间最多1小时后   最后一次访问。

由此我觉得,除非您寻求更新一致性,否则不应依赖文件的最后访问时间。

  

我的经历:

     

但是,API GetFileTimeGetFileAttributesEx确实提供了   你的预期输出。只是这不能从文件中可视化   Properties下的Accessed:字段General tab

     

我不知道这种行为的原因,这就是为什么我问这个问题。

答案 1 :(得分:0)

使用GetFileAttributesEx检索文件上次访问时间。它采用文件名而不是HANDLE

BOOL WINAPI GetFileAttributesEx(
  _In_  LPCTSTR                lpFileName,
  _In_  GET_FILEEX_INFO_LEVELS fInfoLevelId,
  _Out_ LPVOID                 lpFileInformation
);