2016-12-22 3 views
0

Мне нужно проверить время доступа к файлам. У меня есть «GetFileTime» для чтения последнего времени доступа. Обратите внимание, что для этого требуется файл handle в качестве первого аргумента. Это означает, что перед передачей дескриптора GetFileTime Мне нужно создать дескриптор. Поэтому я создал ручку, используя CreateFile(MyFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);Делает ли «щелчок правой кнопкой мыши по файлу» время последнего обновления?

Таким образом, я не получаю последнее время доступа так же, как Accessed:, видно из свойств файла General Tab. Ожидается ли это? или я сделал что-то не так?

Вместо этого я получаю последнее время, когда я последний раз нажимал на файл, чтобы проверить его свойства, но это не влияет на поле Accessed: в General Tab свойствах.

Примечание: Я включил обновление последнего времени доступа в windows server. Этот код является частью модуля authz apache (mod_authz.so). Просветите меня.

ответ

1

Как я не получил быстрый ответ здесь, я отвечал на этот вопрос по serverfault - Ответ достаточно объяснить.

Это заявление от doc.

Не все файловые системы могут записывать создание и время последнего доступа, а не все файловые системы записывают их таким же образом. Например, разрешение времени создания на FAT составляет 10 миллисекунд, а время записи имеет разрешение 2 секунды, а время доступа имеет разрешение 1 , поэтому это действительно дата доступа. Файловая система NTFS задерживает обновлений до последнего времени доступа к файлу на 1 час после последнего доступа .

Исходя из этого, я считаю,

Мой опыт:

Но тем не менее, интерфейсы GetFileTime или GetFileAttributesEx действительно дают вам ожидаемый результат. Просто это невозможно представить из файла Properties для Accessed: Поле под General tab.

Я не знаю причины такого поведения, поэтому я задал этот вопрос.

0

Используйте GetFileAttributesEx для получения последнего времени доступа к файлу. Требуется имя файла вместо HANDLE.

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

Я пробовал, чтобы это получило такое же поведение. Это дает мне последнее время правого клика. Это происходит только в 'windows server' Мой старый код, и эти коды работают в' windows 7' –

Смежные вопросы