Dateizeiten

Eine Dateizeit ist ein 64-Bit-Wert, der die Anzahl der Intervalle von 100 Nanosekunden darstellt, die seit dem 1. Januar 1601 koordinierte Weltzeit (UTC) um 12:00 Uhr verstrichen sind. Das System zeichnet Dateizeiten auf, wenn Anwendungen Dateien erstellen, darauf zugreifen und in sie schreiben.

Das NTFS-Dateisystem speichert Zeitwerte im UTC-Format, sodass sie nicht von Änderungen in der Zeitzone oder sommerzeit beeinflusst werden. Das FAT-Dateisystem speichert Zeitwerte basierend auf der Ortszeit des Computers. Beispielsweise wird eine Datei, die um 15:00 Uhr PST in Washington gespeichert wird, als 18:00 Uhr EST in New York auf einem NTFS-Volume angesehen, aber sie wird als 15:00 Uhr EST in New York auf einem FAT-Volume angesehen.

Zeitstempel werden zu verschiedenen Zeiten und aus verschiedenen Gründen aktualisiert. Die einzige Garantie für einen Dateizeitstempel besteht darin, dass die Dateizeit korrekt wiedergegeben wird, wenn das Handle, das die Änderung vornimmt, geschlossen wird.

Nicht alle Dateisysteme können erstellungs- und letzte Zugriffszeiten aufzeichnen, und nicht alle Dateisysteme erfassen sie auf die gleiche Weise. Beispielsweise beträgt die Auflösung der Erstellungszeit in FAT 10 Millisekunden, während die Schreibzeit eine Auflösung von 2 Sekunden hat und die Zugriffszeit eine Auflösung von 1 Tag hat, sodass es sich wirklich um das Zugriffsdatum handelt. Das NTFS-Dateisystem verzögert Updates bis zur letzten Zugriffszeit für eine Datei um bis zu eine Stunde nach dem letzten Zugriff.

Um die Dateizeiten für eine angegebene Datei abzurufen, verwenden Sie die GetFileTime-Funktion . GetFileTime kopiert die Erstellung, den letzten Zugriff und die letzten Schreibzeiten in einzelne FILETIME-Strukturen . Sie können die Dateizeiten auch mit den Funktionen FindFirstFile und FindNextFile abrufen. Diese Funktionen kopieren die Dateizeiten in FILETIME-Strukturen in einer WIN32_FIND_DATA-Struktur . Beim Schreiben in eine Datei wird die letzte Schreibzeit erst vollständig aktualisiert, wenn alle Zum Schreiben verwendeten Handles geschlossen werden.

Um die Dateizeiten für eine Datei festzulegen, verwenden Sie die SetFileTime-Funktion . Mit dieser Funktion können Sie die Erstellung, den letzten Zugriff und die Zeiten des letzten Schreibvorgangs ändern, ohne den Inhalt der Datei zu ändern. Sie können die Zeiten verschiedener Dateien vergleichen, indem Sie die CompareFileTime-Funktion verwenden . Die Funktion vergleicht zwei Dateizeiten und gibt einen Wert zurück, der angibt, welche Zeit später ist, oder gibt 0 (null) zurück, wenn die Zeiten gleich sind.

Wenn Sie die Dateizeiten für angegebene Dateien ändern möchten, können Sie ein Datum und eine Uhrzeit des Tages mithilfe der SystemTimeToFileTime-Funktion in eine Dateizeit konvertieren. Sie können die Systemzeit auch in einer FILETIME-Struktur abrufen, indem Sie die GetSystemTimeAsFileTime-Funktion aufrufen.

Damit eine Dateizeit für einen Benutzer einfach angezeigt werden kann, verwenden Sie die FileTimeToSystemTime-Funktion . FileTimeToSystemTime konvertiert die Dateizeit und kopiert den Monat, den Tag, das Jahr und die Tageszeit von der Dateizeit in eine SYSTEMTIME-Struktur .

Dateizeiten und Sommerzeit

Sie müssen bei der Verwendung von Dateizeiten aufpassen, wenn der Benutzer das System so eingestellt hat, dass es automatisch für die Sommerzeit angepasst wird.

Um eine Dateizeit in die Lokale Zeit zu konvertieren, verwenden Sie die FileTimeToLocalFileTime-Funktion . FileTimeToLocalFileTime verwendet jedoch die aktuellen Einstellungen für die Zeitzone und die Sommerzeit. Wenn es sich also um Sommerzeit handelt, wird die Sommerzeit berücksichtigt, auch wenn die Dateizeit, die Sie konvertieren, in der Standardzeit liegt.

Das FAT-Dateisystem zeichnet Zeiten auf dem Datenträger in der Ortszeit auf. GetFileTime ruft zwischengespeicherte UTC-Zeiten aus dem FAT-Dateisystem ab. Wenn es zur Sommerzeit wird, beträgt die von GetFileTime abgerufene Zeit eine Stunde, da der Cache nicht aktualisiert wird. Wenn Sie den Computer neu starten, ist die zwischengespeicherte Zeit, die GetFileTime abruft, richtig. FindFirstFile ruft die lokale Zeit aus dem FAT-Dateisystem ab und konvertiert sie in UTC, indem die aktuellen Einstellungen für die Zeitzone und die Sommerzeit verwendet werden. Wenn es sich also um Sommerzeit handelt, berücksichtigt FindFirstFile die Sommerzeit, auch wenn die Dateizeit, die Sie konvertieren, in der Standardzeit liegt.

Das NTFS-Dateisystem zeichnet die Zeiten auf dem Datenträger in UTC auf. Verwenden Sie die folgende Funktionssequenz, anstatt FileTimeToLocalFileTime zu verwenden, um die Sommerzeit beim Konvertieren einer Dateizeit in eine lokale Zeit zu berücksichtigen:

Dateizeiten und CDFS

Die Datums- und Zeitstempel von Dateien, die sich auf Medien befinden oder von Medien stammen, die CDFS (Compact Disc File System) verwenden, werden für die lokale Zeitzone angepasst. ISO 9660 besagt, dass CDFS die Datumsinformationen für die lokale Zeitzone korrekt anzeigt. Dies geschieht, damit Die Datumsangaben für Dateien auf CDFS identisch mit denen im Universellen Datenträgerformat (Universal Disk Format, UDF) angezeigt werden. UDF ist der neuere Standard für Verteilungsmedien. Wenn Ihr Code von den unveränderten Datumsinformationen für eine Datei abhängt, die sich auf Medien mit CDFS befindet oder von ihnen stammt, funktioniert er möglicherweise nicht ordnungsgemäß.