是否有可能存在修改日期早于创建日期的文件?哪些操作会导致此事件发生?
答案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 最常见的合法用途是保存修改时间,例如复制文件、从档案中提取文件等。