檔案時間
檔案時間 是一個 64 位值,代表自 1601 年 1 月 1 日上午 12:00 起經過的 100 奈秒間隔數(UTC)。 系統會在應用程式建立、存取和寫入檔案時記錄檔案的時間。
NTFS 檔案系統會以 UTC 格式儲存時間值,因此不會受到時區或日光節約時間變更的影響。 FAT 檔案系統會根據電腦的當地時間儲存時間值。 例如,在華盛頓下午 3:00 PST 儲存的檔案,在NTFS磁碟區上被視為紐約下午 6:00 EST,但在 FAT 磁碟區上,它被視為紐約下午 3:00 EST。
時間戳會以各種時間更新,並因各種原因而更新。 檔案時間戳的唯一保證是檔案時間會在進行變更的句柄關閉時正確反映。
並非所有文件系統都可以記錄建立和上次存取時間,而且並非所有文件系統都以相同方式記錄它們。 例如,在 FAT 上建立時間的解析度為 10 毫秒,而寫入時間的解析度為 2 秒,而存取時間的解析度為 1 天,因此確實是存取日期。 NTFS 檔系統在上次存取后最多 1 小時,延遲檔案上次存取時間的更新。
若要擷取指定檔案的檔案時間,請使用 GetFileTime 函式。 GetFileTime 會將建立、上次存取和上次寫入時間複製到個別 的 FILETIME 結構。 您也可以使用 FindFirstFile 和 FindNextFile 函式來擷取檔案時間。 這些函式會將檔案時間複製到 WIN32_FIND_DATA 結構中 FILETIME 結構。 寫入至檔案時,直到所有用於寫入的句柄都關閉之後,才會完整更新上次寫入時間。
若要設定檔案的檔案時間,請使用 SetFileTime 函式。 此函式可讓您修改建立、上次存取和上次寫入時間,而不需要變更檔案的內容。 您可以使用 CompareFileTime 函式來比較不同檔案的時間。 函式會比較兩個檔案時間,並傳回一個值,指出時間較晚或如果時間相等,則傳回 0 (零)。
如果您打算修改指定檔案的檔案時間,您可以使用 SystemTimeToFileTime 函式,將日期和時間轉換成檔案時間。 您也可以呼叫 getSystemTimeAsFileTime 函式,以取得 FILETIME 結構中的系統時間。
若要讓使用者輕鬆顯示檔案時間,請使用 FileTimeToSystemTime 函式。 FileTimeToSystemTime 會將檔案時間,並將月份、日、年和日時間從檔案時間複製到 SYSTEMTIME結構。
檔案時間與日光節約時間
如果使用者已將系統設定為自動調整日光節約時間,則必須小心使用檔案時間。
若要將檔案時間轉換為當地時間,請使用 FileTimeToLocalFileTime 函式。 不過,FileTimeToLocalFileTime 使用時區和日光節約時間的目前設定。 因此,如果是日光節約時間,即使轉換的檔案時間是標準時間,它也會考慮日光節約時間。
FAT 檔系統會在當地時間記錄磁碟上的時間。 GetFileTime 從 FAT 檔案系統擷取快取的 UTC 時間。 當它變成日光節約時間時,GetFileTime 所擷取的時間 會關閉一小時,因為快取未更新。 當您重新啟動計算機時,GetFileTime 擷取的快取時間正確。 FindFirstFile 會從 FAT 文件系統擷取當地時間,並使用時區和日光節約時間的目前設定,將它轉換成 UTC。 因此,如果是日光節約時間,FindFirstFile 將日光節約時間納入考慮,即使您轉換的檔案時間是標準時間也一樣。
NTFS 檔案系統會以UTC記錄磁碟上的時間。 若要考慮將檔案時間轉換成當地時間時的日光節約時間,請使用下列函式序列,而不要使用 FileTimeToLocalFileTime:
檔案時間與CDFS
本機時區會針對本機時區調整位於或源自媒體的檔案日期和時間戳。 ISO 9660 指出CDFS會正確顯示當地時區的日期資訊。 這樣做可讓CDFS上的檔案日期與通用磁碟格式 (UDF) 上的檔案顯示日期相同。 UDF 是散發媒體的較新標準。 如果您的程式代碼相依於位於或源自於使用CDFS之檔案的未修改日期資訊,可能無法正常運作。