Как получить дату последнего изменения файла - PullRequest
1 голос
/ 13 апреля 2020

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

hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime);     
FileTimeToSystemTime(&lastWriteTime, &t);

printf("TEST: %d %d %d\n", t.wHour, t.wMinute, t.wSecond);

Я проверил это с файлом на моем HD, дата последнего изменения которого обозреватель сообщает как пятница, 21 марта 1997 года, 14:34:58. Теперь с кодом выше я получил ту же дату, за исключением того, что время сообщается как 13:34:58, то есть один час. Поэтому я подумал, что это, вероятно, связано с отсутствием настроек часового пояса / перехода на летнее время, поэтому я добавил вызов к FileTimeToLocalTime(), то есть так:

hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime);
FileTimeToLocalFileTime(&lastWriteTime, &ft);               
FileTimeToSystemTime(&ft, &t);

Но теперь время сообщается как 15:34:58, т.е. еще один час, но теперь в противоположном направлении. Так что я все еще не получаю 14:34:58, как сообщает Explorer.

Вот почему я хотел бы спросить, как я могу получить дату последнего изменения, как сообщает Explorer. Кто-нибудь?

1 Ответ

1 голос
/ 14 апреля 2020

В блоге " Почему Проводник и командная строка по-разному интерпретируют время файла? " объясняют причину, по которой вы получаете другое время последнего изменения файла из Windows API и из Проводника: " Летнее время".

Для учета летнего времени при преобразовании времени файла в местное время используйте следующую последовательность функций вместо использования FileTimeToLocalFileTime:

  1. FileTimeToSystemTime
  2. SystemTimeToTzSpecificLocalTime
  3. SystemTimeToFileTime.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...