winapi - бессмысленные временные метки файлов?
Вопрос
Кажется, я не могу получить надежную временную метку, используя функции winapi.Например:
int main(int argc, char *argv[]) { HANDLE file; BY_HANDLE_FILE_INFORMATION finfo; SYSTEMTIME systime; file = CreateFile("test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); GetFileInformationByHandle(file,&finfo); FileTimeToSystemTime(&finfo.ftLastWriteTime, &systime); printf(" %s %02d:%02d:%02d %d/%d/%d\n", "test.txt", systime.wHour,systime.wMinute,systime.wSecond,systime.wDay,systime.wMonth,systime.wYear); }
дает бессмыслицу для всех моих файлов, таких как:
test.txt 00:03:30 33/5/3
Похоже, что wDay имеет значения за пределами диапазона 1-31, а время и даты абсолютно неверны.Все остальные значения в BY_HANDLE_FILE_INFORMATION, такие как name и size, верны, и в моем полном коде я проверяю наличие ошибок во всех функциях, но все они возвращают passed.Кто-нибудь знает, что я делаю не так?
Решение
Я думаю, проблема в том, что вы используете filesize.QuadPart
.Попробуйте удалить это как из строки формата, так и из списка аргументов и посмотрите, работает ли это.
Если это поможет, найдите правильную строку формата для использования для 64-разрядного количества в printf()
.