檔案時間

檔案時間是 64 位值,代表自 12:00 A.M.M. January 1, 1601 Coordinated Universal Time (UTC) 起經過的 100 奈秒間隔數目。 當應用程式建立、存取和寫入檔案時,系統會記錄檔案的時間。

NTFS 檔案系統會以 UTC 格式儲存時間值,因此不會受到時區變更或日光節約時間的影響。 FAT 檔案系統會根據電腦的當地時間儲存時間值。 例如,在華盛頓州下午 3:00 PST 儲存的檔案會顯示為 NTFS 磁片區上的紐約下午 6:00 EST,但會在 FAT 磁片區上顯示為紐約下午 3:00 EST。

時間戳記會在各種時間更新,並基於各種原因而更新。 唯一有關檔案時間戳記的保證是當進行變更的控制碼關閉時,檔案時間會正確反映。

並非所有檔案系統都可以記錄建立和上次存取時間,而且並非所有檔案系統都以相同的方式記錄它們。 例如,在 FAT 上建立時間的解析度為 10 毫秒,而寫入時間的解析度為 2 秒,而存取時間的解析度為 1 天,因此實際上是存取日期。 NTFS 檔案系統在上次存取之後最多 1 小時會延遲檔案上次存取時間的更新。

若要擷取指定檔案的檔案時間,請使用 GetFileTime 函式。 GetFileTime 會將建立、上次存取和上次寫入時間複製到個別 FILETIME 結構。 您也可以使用 FindFirstFileFindNextFile 函式來擷取檔案時間。 這些函式會將檔案時間複製到WIN32_FIND_DATA結構中的FILETIME結構。 寫入檔案時,在關閉所有用於寫入的控制碼之前,上次寫入時間不會完全更新。

若要設定檔案的檔案時間,請使用 SetFileTime 函式。 此函式可讓您修改建立、上次存取和上次寫入時間,而不需要變更檔案的內容。 您可以使用 CompareFileTime 函式來比較不同檔案的時間。 函式會比較兩個檔案時間,並傳回值,指出時間晚于哪一個時間,如果時間相等,則傳回 0 (零) 。

如果您打算修改指定檔案的檔案時間,您可以使用 SystemTimeToFileTime 函式,將日期和時間轉換成檔案時間。 您也可以呼叫GetSystemTimeAsFileTime函式,以取得FILETIME結構中的系統時間。

若要讓使用者輕鬆顯示檔案時間,請使用 FileTimeToSystemTime 函式。 FileTimeToSystemTime 會將檔案時間轉換為 SYSTEMTIME 結構,並將月份、日、年和日時間複製到 SYSTEMTIME 結構。

檔案時間和日光節約時間

如果使用者已將系統設定為自動調整日光節約時間,則必須小心使用檔案時間。

若要將檔案時間轉換成當地時間,請使用 FileTimeToLocalFileTime 函式。 不過, FileTimeToLocalFileTime 會使用時區和日光節約時間的目前設定。 因此,如果它是日光節約時間,則即使轉換的檔案時間是標準時間,也會考慮日光節約時間。

FAT 檔案系統會在本機時間記錄磁片上的時間。 GetFileTime 會從 FAT 檔案系統擷取快取的 UTC 時間。 當它變成日光節約時間時, GetFileTime 所擷取的時間會關閉一小時,因為快取不會更新。 當您重新開機電腦時, GetFileTime 所擷取的快取時間是正確的。 FindFirstFile 會從 FAT 檔案系統擷取當地時間,並使用時區和日光節約時間的目前設定,將其轉換成 UTC。 因此,如果是日光節約時間, FindFirstFile 會考慮日光節約時間,即使您轉換的檔案時間是標準時間也一樣。

NTFS 檔案系統會以 UTC 記錄磁片上的時間。 若要考慮將檔案時間轉換成本地時間時的日光節約時間,請使用下列函式序列,而不是使用 FileTimeToLocalFileTime

檔案時間和 CDFS

使用 Compact Disc File System (CDFS) 調整位於或源自媒體的檔案日期和時間戳記,會針對當地時區進行調整。 ISO 9660 指出 CDFS 會正確顯示當地時區的日期資訊。 如此一來,CDFS 上的檔案日期就會與國際磁碟格式上的檔案 (UDF) 相同。 UDF 是散發媒體的較新標準。 如果您的程式碼相依于位於或源自于使用 CDFS 之媒體上的檔案未修改日期資訊,它可能無法正常運作。