Время файла

Время файла — это 64-разрядное значение, представляющее число 100-наносекундных интервалов, прошедших с 12:00 М. 1 января 1601 г. в формате UTC. Система записывает время хранения файлов при создании, доступе и записи приложений в файлы.

Файловая система NTFS сохраняет значения времени в формате UTC, поэтому они не затрагиваются изменениями часового пояса или летнего времени. Файловая система FAT сохраняет значения времени на основе местного времени компьютера. Например, файл, сохраненный в 3:00 pST в Вашингтоне, рассматривается как 6:00 вечера EST в Нью-йорке на томе NTFS, но он рассматривается как 3:00 вечера EST в Нью-йорке на томе FAT.

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

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

Чтобы получить время файла для указанного файла, используйте функцию GetFileTime . GetFileTime копирует создание, последний доступ и время записи в отдельные структуры FILETIME . Вы также можете получить время файла с помощью функций FindFirstFile и FindNextFile . Эти функции копируют время файла в структуры FILETIME в WIN32_FIND_DATA структуре. При записи в файл время последней записи не обновляется полностью, пока не будут закрыты все дескриптора, используемые для записи.

Чтобы задать время файла для файла, используйте функцию SetFileTime . Эта функция позволяет изменять создание, последний доступ и время последней записи, не изменяя содержимое файла. Вы можете сравнить время разных файлов с помощью функции CompareFileTime . Функция сравнивает два раза файла и возвращает значение, указывающее, какое время будет позже или возвращает 0 (ноль), если время равно.

Если планируется изменить время файла для указанных файлов, можно преобразовать дату и время суток в время файла с помощью функции SystemTimeToFileTime . Вы также можете получить системное время в структуре FILETIME , вызвав функцию GetSystemTimeAsFileTime .

Чтобы упростить отображение файла пользователю, используйте функцию FileTimeToSystemTime . FileTimeToSystemTime преобразует время файла и копирует месяц, день, год и время суток из времени файла в структуру SYSTEMTIME .

Время хранения файлов и летнее время

Если пользователь настроил систему для автоматической настройки летнего времени, необходимо учесть время использования файлов.

Чтобы преобразовать время файла в местное время, используйте функцию FileTimeToLocalFileTime . Однако FileTimeToLocalFileTime использует текущие параметры часового пояса и летнего времени. Таким образом, если это летнее время, оно принимает летнее время в учет, даже если время преобразования файла находится в стандартном времени.

Файловая система FAT записывает время на диске в локальное время. GetFileTime извлекает кэшированные время UTC из файловой системы FAT. Когда он становится временем летнего времени, время, полученное GetFileTime , отключено в час, так как кэш не обновляется. При перезагрузке компьютера кэшированное время получения GetFileTime правильно. FindFirstFile извлекает местное время из файловой системы FAT и преобразует его в формате UTC с помощью текущих параметров часового пояса и летнего времени. Таким образом, если это летнее время, FindFirstFile учитывает летнее время, даже если время преобразования файла находится в стандартном времени.

Время записи файловой системы NTFS на диске в формате UTC. Чтобы учитывать летнее время при преобразовании времени файла в местное время, используйте следующую последовательность функций вместо использования FileTimeToLocalFileTime:

Время файлов и CDFS

Метки даты и времени файлов, расположенных или исходящих из носителя с помощью файловой системы компакт-дисков (CDFS), корректируются для местного часового пояса. ISO 9660 указывает, что CDFS правильно отображает сведения о дате для местного часового пояса. Это делается так, чтобы даты для файлов в CDFS отображались так же, как и в универсальном формате диска (UDF). Определяемая пользователем функция — это более новый стандарт для носителей распространения. Если код зависит от неизмененной даты для файла, который находится на носителе или поступает из него с помощью CDFS, он может работать неправильно.