INFO: Arbeiten mit der FILETIME-Struktur

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 188768 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Eine Dateizeit werden das Datum und die Uhrzeit an dem eine bestimmte Datei wurde erstellt, zuletzt zugegriffen oder zuletzt geschrieben darstellt. Eine Dateizeit wird in eine FILETIME-Struktur gespeichert. Diese Struktur wird mit verschiedenen Win32-API-Aufrufe verwendet.

Weitere Informationen

Die FILETIME-Struktur stellt die Anzahl der 100-Nanosekunden-Intervalle seit Januar 1, 1601 dar. Die Struktur besteht aus zwei 32-Bit-Werte, die kombinieren, um einen einzelnen 64-Bit-Wert.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
beachten, dass die FILETIME-Struktur auf 100-Nanosekunden-Intervalle basiert. Es empfiehlt sich die folgenden Symbole beim Arbeiten mit Datei Zeiten zu definieren. Zum Beispiel:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Durchführen von Arithmetics mit Datei Zeiten

Es ist häufig erforderlich, eine einfache arithmetische Operationen auf Datei Zeiten auszuführen. Beispielsweise müssen Sie wissen, wann eine Datei 30 Tage alt ist. Eine arithmetische auf eine Dateizeit durchführen möchten, müssen Sie zum Konvertieren von FILETIME in einem Quadword (eine 64-Bit-Ganzzahl) die arithmetische Operationen ausführen, und konvertieren das Ergebnis zurück in eine FILETIME.

Wenn ft eine FILETIME-Struktur mit den Erstellungszeitpunkt einer Datei ist, der folgende Beispielcode 30 Tage bis zu dem Zeitpunkt, an dem fügt:
   ULONGLONG qwResult;

   // Copy the time into a quadword.
   qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;

   // Add 30 days.
   qwResult += 30 * _DAY;

   // Copy the result back into the FILETIME structure.
   ft.dwLowDateTime  = (DWORD) (qwResult & 0xFFFFFFFF );
   ft.dwHighDateTime = (DWORD) (qwResult >> 32 );
				

Datei Zeiten festlegen

Sie können die Datei Zeiten für eine Datei mithilfe der Funktion SetFileTime() festlegen.
   BOOL SetFileTime(
     HANDLE hFile,                     // Handle to the file.
     CONST FILETIME *lpCreationTime,   // Time the file was created.
     CONST FILETIME *lpLastAccessTime, // Time the file was last accessed.
     CONST FILETIME *lpLastWriteTime   // Time the file was last
                                       // written to.
   );
				
dieser Funktion können Sie ändern, erstellen, Letzter Zugriff und letzten Mal schreiben, ohne den Inhalt der Datei. Um diese Funktion verwenden, benötigen Sie einen Handle zu der geöffneten Datei. Dieses Dateihandle kann von einem Aufruf von CreateFile() oder OpenFile() abgerufen werden. Die Datei muss mit GENERIC_WRITE Zugriff geöffnet werden. Nachdem die Datei Zeiten festgelegt haben, sollten Sie das Dateihandle durch einen Aufruf von CloseHandle() freigeben.

Annahme SzFilename ist ein gültiger Dateiname und ft ist eine FILETIME-Struktur, mit dem folgenden Beispielcode wird das Erstellungsdatum der Datei mit der Zeit in Fuß enthaltenen:
   BOOL bResult;
   HANDLE hFile = CreateFile( szFilename,
      GENERIC_WRITE, // The file must be opened with write access.
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );

   if (hFile != INVALID_HANDLE_VALUE) {
      bResult = SetFileTime( hFile, &ft, NULL, NULL );
      CloseHandle(hFile);
   }
				

Datei-Zeiten anzeigen

Die Dateizeit basiert auf Coordinated Universal Time (). UTC-basierten Zeit ist als das aktuelle Datum und Uhrzeit in Greenwich, England lose definiert. Sie werden wahrscheinlich die Dateizeit in Bezug auf die lokale Zeit (d. h., Datum und Tageszeit für die Zeitzone) anzeigen möchten. Um dies tun, können Sie FileTimeToLocalFileTime() wie folgt:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
Hinweis, dass diese Funktion die aktuellen Einstellungen für die Zeitzone und Sommerzeit verwendet. Daher, wenn es sich um Sommerzeit handelt, wird diese Funktion Sommerzeit, berücksichtigen auch wenn die Zeit, die Sie konvertieren, in Standardzeit.

Um die Dateizeit auf sinnvolle Weise anzuzeigen, müssen Sie zunächst in eine Systemzeit mit FileTimeToSystemTime() wie folgt konvertieren:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
der SYSTEMTIME-Struktur ein Datum und Uhrzeit mit der einzelnen Mitglieder für Monat, Tag, Jahr, Weekday, Stunde, Minute, Sekunde und Millisekunde darstellt.

Außerdem ist es vorzuziehen, Datum und Uhrzeit in einem Format konsistent mit dem aktuellen Gebietsschema für das System ausgewählt angezeigt. Sie erreichen dies mithilfe von GetDateFormat() und GetTimeFormat() wie folgt:
   int GetDateFormat(
     LCID Locale,              // Locale for which date is to be formatted.
     DWORD dwFlags,            // Flags specifying function options.
     CONST SYSTEMTIME *lpDate, // Date to be formatted.
     LPCTSTR lpFormat,         // Date format string.
     LPTSTR lpDateStr,         // Buffer for storing formatted string.
     int cchDate               // Size of buffer.
   );

   int GetTimeFormat(
     LCID Locale,              // Locale for which time is to be formatted.
     DWORD dwFlags,            // Flags specifying function options.
     CONST SYSTEMTIME *lpTime, // Time to be formatted.
     LPCTSTR lpFormat,         // Time format string.
     LPTSTR lpTimeStr,         // Buffer for storing formatted string.
     int cchTime               // Size of buffer.
   );
				
nach LOCALE_USER_DEFAULT zu diesen Funktionen als ersten Parameter übergeben, weisen Sie Sie übergebene Datum/Uhrzeit entsprechend auf das Standardformat für das aktuelle Gebietsschema zu formatieren. In diesem Fall können Sie NULL für die LpFormat-Parameter übergeben.

Wenn ft eine FILETIME-Struktur mit einem UTC-Wert ist, druckt der folgende Beispielcode das Datum in ft gespeichert:
   SYSTEMTIME st;
   char szLocalDate[255], szLocalTime[255];

   FileTimeToLocalFileTime( &ft, &ft );
   FileTimeToSystemTime( &ft, &st );
   GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL,
     szLocalDate, 255 );
   GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255 );
   printf( "%s %s\n", szLocalDate, szLocalTime );
				

Eigenschaften

Artikel-ID: 188768 - Geändert am: Dienstag, 23. Januar 2007 - Version: 3.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Win32 Application Programming Interface, wenn verwendet mit:
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Keywords: 
kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 188768
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com