Поделиться через


Время файла

Время файла — это 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). UDF — это более новый стандарт для носителей распространения. Если код зависит от неизмененных сведений о дате для файла, на котором находится файл, на котором находится носитель с помощью CDFS, он может не работать правильно.