Нужна функция, возвращающая unix timestamp для файла. На WinAPI. RtlTimeToSecondsSince1970 (кстати, как она работает?) использовать не могу, ибо 98: Код (Text): #include <windows.h> #include <stdio.h> #include <time.h> #include <stdint.h> #include <sys/stat.h> void foo(char * file, time_t * timestamp) { WIN32_FILE_ATTRIBUTE_DATA fi; int64_t tsWindows; const int64_t tsUnixEpoch = 0x019db1ded53e8000; *timestamp = 0; if (GetFileAttributesEx(file, GetFileExInfoStandard, &fi)) { tsWindows = *((int64_t *) &fi.ftLastWriteTime); *timestamp = (time_t) ((tsWindows - tsUnixEpoch) / 10000000); } return; } int main(void) { time_t time_win; struct _stat st; foo("C:/boot.ini", &time_win); _stat("C:/boot.ini", &st); printf("%ld %ld %ld\n", (long) time_win, (long) st.st_mtime, (long) st.st_mtime - (long) time_win); return 0; } Магическая константа получилась так: Код (Text): SYSTEMTIME st = {1970, 1, 0, 1, 0, 0, 0, 0}; FILETIME ft; SystemTimeToFileTime(&st, &ft); printf("%#.8lx%.8lx\n", ft.dwHighDateTime, ft.dwLowDateTime); Оно даже работает (GCC/TCC/MSVC6), но результат отличается от результата, возвращаемого _stat, на целый час (что-то с daylight saving?). Какой результат правильный, и почему так происходит?
Если FAT и файл изменен в "зимнее" время, то возможно, т.к. в отличие от NTFS в FAT сохраняется не UTC, а локальное время создания\изменения файла, а при чтении винда тупо конвертит это время в UTC используя текущее состояние daylight saving. см. File Times PS: Как ведет себя _stat не знаю. Поэтому попробуй на файле, измененным в "летнее" время, если разница исчезнет, то дело в этом, иначе в чем-то другом