您目前已離線,請等候您的網際網路重新連線

資訊: 使用 FILETIME 結構

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:188768
結論
檔案時間代表特定日期和時間所指定的檔案建立、 上次存取或上次寫入。檔案時間儲存在 FILETIME 結構。這個結構可搭配各種 Win32 API 呼叫使用。
其他相關資訊
FILETIME 結構表示從西元 1601 1 月 1 後, 的 100 奈秒間隔數目。結構是由結合以形成單一的 64 位元值的兩個 32 位元值所組成。
   typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime;   } FILETIME;				
注意 FILETIME 結構根據 100 奈秒的時間間隔。它將很有幫助時使用的檔案時間定義下列的符號。 例如:
   #define _SECOND ((int64) 10000000)   #define _MINUTE (60 * _SECOND)   #define _HOUR   (60 * _MINUTE)   #define _DAY    (24 * _HOUR)				

使用檔案時間執行 Arithmetics

則通常必須對檔案的時間執行簡單的算術運算。比方說您可能需要知道檔案時 30 天。檔案時間上執行的算術,您需要轉換 [FILETIME 為 quadword (64 位元整數),執行算術並且再將結果轉換回一個 FILETIME。

假設英呎 FILETIME 結構,包含檔案的建立時間,下列的範例程式碼加入 30 天時間:
   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 );				

設定檔案時間

您可以利用 SetFileTime() 函式來設定檔案時間的檔案。
   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.   );				
這個函式可讓您修改建立、 上次存取,及上次寫入時間而不變更檔案的內容。若要將這個函式您必須在控點到開啟檔案。此檔案控制碼可以取得從 CreateFile() 或 OpenFile() 的呼叫。必須先以 GENERIC_WRITE 存取開啟檔案。已設定檔案時間後您應該放開透過 CloseHandle() 呼叫檔案控點。

假設 szFilename 是有效的檔名和英呎是 FILETIME 結構,下列的範例程式碼會將檔案建立日期設定為英呎中所包含的時間:
   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);   }				

顯示檔案的時間

檔案時間會以定位通用時間 (UTC) 為基礎。UTC 時間鬆散是格林威治,英格蘭中定義為目前的日期和時間。您最有可能會要顯示檔案時間相對於本地時間 (也就是日期和您的時區的一天時間的)。若要執行此動作您可以使用 FileTimeToLocalFileTime(),如下所示:
   BOOL FileTimeToLocalFileTime(     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.     LPFILETIME lpLocalFileTime   // Pointer to converted file time.   );
附註此函式會對時區和日光節約時間使用目前的設定。因此,如果是日光節約時間,這個函式會考量日光節約時間,即使您所要轉換的時間處於標準時間的問題。

若要以有意義的方式顯示檔案時間,您必須先將它轉換成系統時間,如下所示用 FileTimeToSystemTime():
   BOOL FileTimeToSystemTime(     CONST FILETIME *lpFileTime, // Pointer to file time to convert.     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive   );                            // system time.				
[SYSTEMTIME 結構它表示日期和時間使用個別成員的月、 天、 年、 週間日、 小時、 分鐘、 第二個和毫秒。

最好也與選取的系統目前的地區設定一致的格式顯示日期和時間。您可以如此做,請使用 GetDateFormat() 和 GetTimeFormat(),如下所示:
   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.   );				
依將 LOCALE_USER_DEFAULT 做為第一個參數傳遞給這些函數,您告訴他們格式化至傳遞的日期/時間依據預設格式來為目前的地區設定。在這種情況下您可以將 NULL 傳遞 lpFormat 參數。

假設英呎 FILETIME 結構,包含 UTC 值,下列的範例程式碼列印儲存在英呎日期:
   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 );				

警告:本文為自動翻譯

內容

文章識別碼:188768 - 最後檢閱時間:01/23/2007 19:28:47 - 修訂: 3.3

Microsoft Win32 Application Programming Interface

  • kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMtzh
意見反應