0

我需要检查文件的最后访问时间。我使用“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) 的一部分。开导我。

4

2 回答 2

1

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

这是来自doc的声明。

并非所有文件系统都可以记录创建和上次访问时间,也不是所有文件系统都以相同的方式记录它们。比如FAT上create time的分辨率是10毫秒,而write time的分辨率是2秒,access time的分辨率是1day,所以是真正的access date。NTFS 文件系统将文件的上次访问时间的更新延迟到上次访问后最多 1 小时。

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

我的经验:

但是,APIGetFileTime还是GetFileAttributesEx会为您提供预期的输出。只是这无法 从Properties.Accessed:General tab

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

于 2016-12-23T04:10:11.243 回答
0

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

BOOL WINAPI GetFileAttributesEx(
  _In_  LPCTSTR                lpFileName,
  _In_  GET_FILEEX_INFO_LEVELS fInfoLevelId,
  _Out_ LPVOID                 lpFileInformation
);
于 2016-12-22T04:29:00.397 回答