我需要更新創建時間透過刪除並重新建立偽造文件,將其恢復到「現在」。奇怪的是,新建立的檔案看起來繼承了原始檔案的建立時間!
讓我來示範一下:
> touch a.txt //create a new file
> dir /T:C //creation time
02/27/2013 02:04 PM 0 a.txt
> dir /T:W //modification time
02/27/2013 02:04 PM 0 a.txt
//wait a bit...
> touch a.txt //update modified-time
> dir /T:C
02/27/2013 02:04 PM 0 a.txt
> dir /T:W //mod-time changed, as expected
02/27/2013 02:05 PM 0 a.txt
> del a.txt
> touch a.txt //recreate file
> dir /T:C //same original ctime !!
02/27/2013 02:04 PM 0 a.txt
> dir /T:W //the actual time the 2nd file was created
02/27/2013 02:06 PM 0 a.txt
> del a.txt
> touch b.txt //ok, create a file with a different name
> dir /T:C //ctime as expected
02/27/2013 02:07 PM 0 b.txt
> mv b.txt a.txt
> dir /T:C //again, ctime of original file!
02/27/2013 02:04 PM 0 a.txt
> del a.txt
> touch c.txt //create a file with a different name, again
> dir /T:C //ctime as expected
02/27/2013 02:08 PM 0 c.txt
> cp c.txt a.txt //this time copy it...
> dir /T:C //ctime of a.txt is that of original file!
02/27/2013 02:04 PM 0 a.txt
02/27/2013 02:08 PM 0 c.txt
//wait longer...
> del *
> touch d.txt
> dir /T:C
02/27/2013 02:22 PM 0 d.txt
> cp d.txt a.txt
> dir /T:C //lo and behold, the ctime has changed.
02/27/2013 02:22 PM 0 a.txt
02/27/2013 02:22 PM 0 d.txt
我的演示到此結束。出現兩個問題:
^^^ 他說的話。
我該如何修復它?
好吧,讓我擴展一下這些:
有人知道 Windows 作業系統/NTFS 的內部機制在運作嗎?看起來好像發生了一些文件元資料緩存,並且緩存失效是有時間限制的。
關於如何獲得與原始文件同名且最新的全新文件,有什麼建議嗎
ctime
?歡迎提出任何建議,無論是批次腳本、註冊表駭客、程式設計或其他任何建議。
答案1
答案:
- 這個過程稱為「檔案系統隧道」(源自量子力學),據我了解,它最初是為 win 95 設計的。在這種情況下,使用者通常會期望建立日期(和短檔案名稱)不會更改,但如果沒有隧道,建立日期將反映上次儲存時間。看:關於 Windows 文件時間的一些提醒,文件系統隧道的杜撰歷史
- 有兩種方法可以解決這個問題:
- 儲存/建立後立即修改建立時間
- 透過註冊表設定(對於整個作業系統):
檔案隧道設定由 Windows 登錄項目 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 控制。
若要增加隧道快取時間,請修改/新增 DWORD 值 MaximumTunnelEntryAgeInSeconds。預設快取時間為 15 秒。若要停用隧道,請修改/新增 DWORD 值 MaximumTunnelEntries 並將其設為 0。
答案2
答案3
使用atime,而不是ctime。訪問時間實際上是創建時間,因為它不會在訪問時更新不再