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

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

是否有可能存在修改日期早于创建日期的文件?哪些操作会导致此事件发生?

答案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,如下所示这个 Ask Ubuntu 答案. Linux 文件系统上并没有文件创建日期的概念(Unix & Linux 的进一步阅读)。

答案3

考虑一个解压的 .tar 档案。通常,解压的文件将具有从档案内容分配的最后修改时间戳(除非您是时间旅行者,否则通常是过去的时间)。就文件系统而言,这些文件刚刚被创建。

还有一些实用程序可以更改现有文件的修改时间,例如在 Linux 上触碰命令。

答案4

这里需要注意的最重要的一点是,文件修改时间其实并不特殊——它就像任何其他数据一样被存储。没有办法知道数据何时被修改实际上最后写入或读取。

从这里,我们可以看到,总是可以(除了像 CD 这样的一次写入媒体)直接修改驱动器上存储最后修改时间甚至创建时间的位。

更实际的是,这也可以在常见的操作系统中实现,正如其他答案所指出的那样。在 Windows 中,这是由 WinAPI 提供的SetFileTime函数,你可以这样做utime在 Linux 上。 类似这样的工具就是touch在这些 API 之上构建的。

这些 API 最常见的合法用途是保存修改时间,例如复制文件、从档案中提取文件等。

相关内容