Windows 7 檔案系統:大吃一驚 - 刪除並重新建立檔案:建立時間沒有改變!為什麼以及如何解決?

Windows 7 檔案系統:大吃一驚 - 刪除並重新建立檔案:建立時間沒有改變!為什麼以及如何解決?

我需要更新創建時間透過刪除並重新建立偽造文件,將其恢復到「現在」。奇怪的是,新建立的檔案看起來繼承了原始檔案的建立時間!

讓我來示範一下:

> 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

我的演示到此結束。出現兩個問題:

搞什麼?

  1. ^^^ 他說的話。

  2. 我該如何修復它?

好吧,讓我擴展一下這些:

  1. 有人知道 Windows 作業系統/NTFS 的內部機制在運作嗎?看起來好像發生了一些文件元資料緩存,並且緩存失效是有時間限制的。

  2. 關於如何獲得與原始文件同名且最新的全新文件,有什麼建議嗎ctime?歡迎提出任何建議,無論是批次腳本、註冊表駭客、程式設計或其他任何建議。

答案1

答案:

  1. 這個過程稱為「檔案系統隧道」(源自量子力學),據我了解,它最初是為 win 95 設計的。在這種情況下,使用者通常會期望建立日期(和短檔案名稱)不會更改,但如果沒有隧道,建立日期將反映上次儲存時間。看:關於 Windows 文件時間的一些提醒,文件系統隧道的杜撰歷史
  2. 有兩種方法可以解決這個問題:
  • 儲存/建立後立即修改建立時間
  • 透過註冊表設定(對於整個作業系統):

檔案隧道設定由 Windows 登錄項目 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 控制。

若要增加隧道快取時間,請修改/新增 DWORD 值 MaximumTunnelEntryAgeInSeconds。預設快取時間為 15 秒。若要停用隧道,請修改/新增 DWORD 值 MaximumTunnelEntries 並將其設為 0。

答案2

我不使用 Windows,但我想我已經找到了解決方法。

  1. Win32顯然允許修改文件創建時間, 使用設定文件時間功能。

  2. 如果您不使用 Win32 編寫應用程序,則應該能夠使用 PowerShell。基於一個類似的計算器答案:

    C:\> powershell  (ls your-file-name-here).CreationTime = Get-Date
    

答案3

使用atime,而不是ctime。訪問時間實際上是創建時間,因為它不會在訪問時更新不再

相關內容