文件在創建之前是否可以被修改?

文件在創建之前是否可以被修改?

是否有可能文件的修改日期早於其建立日期?哪些操作會導致此事件發生?

答案1

如果您從頭開始建立文件,它將獲得「現在」的建立時間和「現在」的修改日期。現在想像一下將此檔案複製到另一個磁碟機。 Windows 將保留修改時間,但該檔案的建立時間將設定為您將檔案複製到該磁碟機的時間(即檔案建立的時間)駕駛)。就那麼簡單。

這實際上是正確的:

  • 文件內容的最後一次變更時間儲存在修改時間中。
  • 文件在該磁碟機上建立的時間儲存在建立時間中。

答案2

在 Windows 上,設定(如果願意的話,可以偽造)檔案的建立和修改時間非常容易。您不必更改計算機的時鐘;您甚至不需要本機管理員存取權限。您所需要的只是對相關文件的寫入存取權限。

使用 PowerShell 設定檔案的建立時間SetCreationTime

[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))

若要設定上次修改時間,請使用SetLastWriteTime

[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))

-d在 Linux 上,您可以使用標誌輕鬆更改檔案的上次修改時間touch,如下所示這個詢問 Ubuntu 答案。 Linux 檔案系統上的檔案實際上沒有創建日期的概念(進一步閱讀 Unix 和 Linux)。

答案3

考慮提取的 .tar 存檔。通常,提取的文件將具有從存檔內容分配的上次修改時間戳(通常是過去的時間,除非您是時間旅行者)。就檔案系統而言,這些文件剛剛被創建。

還有一些實用程式可以更改現有文件的修改時間,例如在 Linux 上,這是觸碰命令。

答案4

這裡要注意的最重要的事情是文件修改時間並不真正特殊 - 它的儲存方式就像任何其他資料一樣。無法判斷數據何時實際上最後寫入或讀取。

從這裡,我們可以看到,總是可以直接修改磁碟機上儲存上次修改時間甚至建立時間的位元(不包括 CD 等一次性寫入媒體)。

更實際的是,正如其他答案所指出的那樣,這也可以在通用作業系統中實現。在 Windows 中,這是由 WinAPI 提供的SetFileTime函數,你可以用utime在 Linux 上。類似touch建構在這些 API 之上的工具。

這些 API 最常見的合法用途是保留修改時間,例如複製文件、從存檔中提取文件等時。

相關內容