Время файла

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

Файловая система NTFS хранит значения времени в формате UTC, поэтому изменения часового пояса или летнего времени не влияют на них. Файловая система FAT хранит значения времени на основе местного времени компьютера. Например, файл, сохраненный в 15:00 по восточному времени в Вашингтоне, рассматривается как 18:00 EST в Нью-йорке на томе NTFS, но он рассматривается как 15: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, он может работать неправильно.