Heures de fichier

Une heure de fichier est une valeur de 64 bits qui représente le nombre d’intervalles de 100 nanosecondes qui se sont écoulés depuis le 1er janvier 1601 (UTC) à 12 h 00. Le système enregistre les heures de fichier lorsque les applications créent des fichiers, y accèdent et écrivent dans des fichiers.

Le système de fichiers NTFS stocke les valeurs d’heure au format UTC, de sorte qu’elles ne sont pas affectées par les modifications apportées au fuseau horaire ou à l’heure d’été. Le système de fichiers FAT stocke les valeurs d’heure en fonction de l’heure locale de l’ordinateur. Par exemple, un fichier enregistré à 15h00 PST à Washington est vu comme 18h00 EST à New York sur un volume NTFS, mais il est vu comme 15h00 EST à New York sur un volume FAT.

Les horodatages sont mis à jour à différents moments et pour diverses raisons. La seule garantie d’un horodatage de fichier est que l’heure du fichier est correctement reflétée lorsque le handle qui effectue la modification est fermé.

Tous les systèmes de fichiers ne peuvent pas enregistrer les heures de création et de dernier accès, et tous les systèmes de fichiers ne les enregistrent pas de la même manière. Par exemple, la résolution de l’heure de création sur FAT est de 10 millisecondes, tandis que le temps d’écriture a une résolution de 2 secondes et le temps d’accès a une résolution de 1 jour. Il s’agit donc vraiment de la date d’accès. Le système de fichiers NTFS retarde les mises à jour jusqu’à l’heure du dernier accès pour un fichier jusqu’à 1 heure après le dernier accès.

Pour récupérer les heures de fichier d’un fichier spécifié, utilisez la fonction GetFileTime . GetFileTime copie la création, le dernier accès et l’heure de la dernière écriture dans des structures FILETIME individuelles. Vous pouvez également récupérer les heures de fichier à l’aide des fonctions FindFirstFile et FindNextFile . Ces fonctions copient les heures de fichier dans des structures FILETIME dans une structure WIN32_FIND_DATA . Lors de l’écriture dans un fichier, l’heure de la dernière écriture n’est pas entièrement mise à jour tant que tous les handles utilisés pour l’écriture ne sont pas fermés.

Pour définir les heures de fichier d’un fichier, utilisez la fonction SetFileTime . Cette fonction vous permet de modifier la création, le dernier accès et les heures de dernière écriture sans modifier le contenu du fichier. Vous pouvez comparer les heures de différents fichiers à l’aide de la fonction CompareFileTime . La fonction compare deux fois de fichier et retourne une valeur qui indique l’heure ultérieure ou retourne 0 (zéro) si les heures sont égales.

Si vous envisagez de modifier les heures de fichier pour les fichiers spécifiés, vous pouvez convertir une date et une heure de la journée en une heure de fichier à l’aide de la fonction SystemTimeToFileTime . Vous pouvez également obtenir l’heure système dans une structure FILETIME en appelant la fonction GetSystemTimeAsFileTime .

Pour faciliter l’affichage d’une heure de fichier pour un utilisateur, utilisez la fonction FileTimeToSystemTime . FileTimeToSystemTime convertit l’heure du fichier et copie le mois, le jour, l’année et l’heure de la journée à partir de l’heure du fichier dans une structure SYSTEMTIME .

Heure du fichier et heure d’été

Lors de l’utilisation des heures de fichier, vous devez faire attention si l’utilisateur a configuré le système pour qu’il s’ajuste automatiquement à l’heure d’été.

Pour convertir une heure de fichier en heure locale, utilisez la fonction FileTimeToLocalFileTime . Toutefois, FileTimeToLocalFileTime utilise les paramètres actuels pour le fuseau horaire et l’heure d’été. Par conséquent, s’il s’agit de l’heure d’été, il prend en compte l’heure d’été, même si l’heure du fichier que vous convertissez est en heure standard.

Le système de fichiers FAT enregistre les heures sur le disque en heure locale. GetFileTime récupère les heures UTC mises en cache du système de fichiers FAT. Lorsqu’il devient l’heure d’été, l’heure récupérée par GetFileTime est décalé d’une heure, car le cache n’est pas mis à jour. Lorsque vous redémarrez l’ordinateur, l’heure de mise en cache récupérée par GetFileTime est correcte. FindFirstFile récupère l’heure locale du système de fichiers FAT et la convertit en utc à l’aide des paramètres actuels du fuseau horaire et de l’heure d’été. Par conséquent, s’il s’agit de l’heure d’été, FindFirstFile prend en compte l’heure d’été, même si l’heure du fichier que vous convertissez est en heure standard.

Le système de fichiers NTFS enregistre les heures sur le disque au format UTC. Pour tenir compte de l’heure d’été lors de la conversion d’une heure de fichier en heure locale, utilisez la séquence de fonctions suivante au lieu d’utiliser FileTimeToLocalFileTime :

Durées de fichier et CDFS

Les horodatages de date et d’heure des fichiers qui se trouvent sur ou proviennent d’un média utilisant le système de fichiers compacts de disque (CDFS) sont ajustés pour le fuseau horaire local. ISO 9660 indique que CDFS doit afficher correctement les informations de date pour le fuseau horaire local. Cela permet d’afficher les dates des fichiers sur CDFS comme celles du format de disque universel (UDF). La fonction UDF est la norme la plus récente pour les médias de distribution. Si votre code dépend des informations de date non modifiées d’un fichier qui réside ou provient d’un média utilisant CDFS, il peut ne pas fonctionner correctement.