Tiempos de archivo
Un tiempo de archivo es un valor de 64 bits que representa el número de intervalos de 100 nanosegundos que han transcurrido desde las 12:00 A.M. 1 de enero de 1601 Hora universal coordinada (UTC). El sistema registra los tiempos de archivo en los que las aplicaciones crean, acceden y escriben en archivos.
El sistema de archivos NTFS almacena los valores de hora en formato UTC, por lo que no se ven afectados por los cambios en la zona horaria o el horario de verano. El sistema de archivos FAT almacena los valores de hora en función de la hora local del equipo. Por ejemplo, un archivo que se guarda a las 3:00pm PST en Washington se ve como 6:00PM EST en New York en un volumen NTFS, pero se ve como 3:00pm EST en New York en un volumen FAT.
Las marcas de tiempo se actualizan en varias ocasiones y por diversos motivos. La única garantía sobre una marca de tiempo de archivo es que el tiempo del archivo se refleja correctamente cuando se cierra el identificador que realiza el cambio.
No todos los sistemas de archivos pueden registrar la creación y los últimos tiempos de acceso, y no todos los sistemas de archivos los registran de la misma manera. Por ejemplo, la resolución de tiempo de creación en FAT es de 10 milisegundos, mientras que el tiempo de escritura tiene una resolución de 2 segundos y el tiempo de acceso tiene una resolución de 1 día, por lo que es realmente la fecha de acceso. El sistema de archivos NTFS retrasa las actualizaciones de la última hora de acceso de un archivo hasta 1 hora después del último acceso.
Para recuperar las horas de archivo de un archivo especificado, use la función GetFileTime . GetFileTime copia las horas de creación, último acceso y última escritura en estructuras FILETIME individuales. También puede recuperar tiempos de archivo mediante las funciones FindFirstFile y FindNextFile . Estas funciones copian los tiempos de archivo en estructuras FILETIME en una estructura de WIN32_FIND_DATA . Al escribir en un archivo, la hora de la última escritura no se actualiza completamente hasta que se cierran todos los identificadores que se usan para escribir.
Para establecer las horas de archivo de un archivo, use la función SetFileTime . Esta función permite modificar las horas de creación, último acceso y última escritura sin cambiar el contenido del archivo. Puede comparar las horas de los distintos archivos mediante la función CompareFileTime . La función compara dos veces el archivo y devuelve un valor que indica qué hora es posterior o devuelve 0 (cero) si las veces son iguales.
Si tiene previsto modificar las horas de archivo de los archivos especificados, puede convertir una fecha y hora del día en una hora de archivo mediante la función SystemTimeToFileTime . También puede obtener la hora del sistema en una estructura FILETIME llamando a la función GetSystemTimeAsFileTime .
Para facilitar la visualización de un archivo a un usuario, use la función FileTimeToSystemTime . FileTimeToSystemTime convierte la hora del archivo y copia el mes, el día, el año y la hora del día de la hora del archivo en una estructura SYSTEMTIME .
Horario de archivo y horario de verano
Debe tener cuidado al usar las horas de archivo si el usuario ha establecido el sistema para ajustar automáticamente el horario de verano.
Para convertir una hora de archivo en hora local, use la función FileTimeToLocalFileTime . Sin embargo, FileTimeToLocalFileTime usa la configuración actual para la zona horaria y el horario de verano. Por lo tanto, si es horario de verano, se toma en cuenta el horario de verano, incluso si la hora del archivo que está convirtiendo está en hora estándar.
El sistema de archivos FAT registra las horas en el disco en la hora local. GetFileTime recupera las horas UTC almacenadas en caché del sistema de archivos FAT. Cuando se convierte en horario de verano, la hora recuperada por GetFileTime está desactivada una hora, ya que la memoria caché no se actualiza. Al reiniciar el equipo, el tiempo almacenado en caché que GetFileTime recupera es correcto. FindFirstFile recupera la hora local del sistema de archivos FAT y la convierte en UTC mediante la configuración actual de la zona horaria y el horario de verano. Por lo tanto, si es horario de verano, FindFirstFile toma el horario de verano en cuenta, incluso si la hora del archivo que está convirtiendo está en hora estándar.
El sistema de archivos NTFS registra las horas en el disco en UTC. Para tener en cuenta el horario de verano al convertir una hora de archivo en una hora local, use la siguiente secuencia de funciones en lugar de usar FileTimeToLocalFileTime:
Tiempos de archivo y CDFS
Las marcas de fecha y hora de los archivos que se encuentran o se originan en medios mediante el Sistema de archivos de disco compacto (CDFS) se ajustan para la zona horaria local. ISO 9660 indica que CDFS debe mostrar la información de fecha correctamente para la zona horaria local. Esto se hace para que las fechas de los archivos de CDFS se muestren igual que las de formato de disco universal (UDF). UDF es el estándar más reciente para los medios de distribución. Si el código depende de la información de fecha sin modificar de un archivo que reside o se origina en medios mediante CDFS, es posible que no funcione correctamente.