文件可以在创建之前被修改吗?[重复]


9

是否可以有一个修改日期早于其创建日期的文件?哪些动作将导致此事件发生?


7
创建文件。倒转时钟。修改文件。再次放回时钟。
DavidPostill

@DavidPostill注意,至少在Windows上,更改系统时间需要管理权限,而还有其他方法可以创建有趣的文件时间。
本N

Answers:


8

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

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


对于单个文件,cp -p模仿它的事物(例如rcp -pscp -p,以及rsync使用-t或)-a从源中获取modtime。
dave_thompson_085 '16

“创建时间”是Windows术语,不是* nix。* nix具有“更改时间”,很容易将其与“创建时间”混淆,但不是一回事。
plugwash

ext4显然存储了一个“出生时间”,该时间与Windows“创建时间”相似(但不相同),但是没有很好的方法来访问它。unix.stackexchange.com/a/50184/122182
–plugwash

8

如果从头开始创建文件,则其创建时间为“现在”,修改日期为“现在”。现在想象将文件复制到另一个驱动器。Windows将保留修改时间,但是该文件的创建时间将设置为将文件复制到该驱动器的时间(即,在驱动器上创建文件的时间)。就那么简单。

实际上是正确的:

  • 上次更改文件内容的时间存储在修改时间中。
  • 在该驱动器上创建文件的时间将存储在创建时间中。

此注释最有意义,因为它说明了发生创建/修改的日期差异的可能性很高。
Shukri Adams

7

在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"))

在Linux上,您可以使用-d标志轻松更改文件的最后修改时间touch,如Ask Ask Answer所示。在Linux文件系统上并没有真正的文件创建日期的概念(请在Unix&Linux上进一步阅读)。


3

是。在Windows上,对文件进行更改并保存。现在复制文件。查看副本的属性,您会看到它具有更早的修改日期。


1

这里要注意的最重要的一点是,文件修改时间并不是很特别-它与其他任何数据一样存储。无法确定何时实际最后写入或读取数据。

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

实际上,正如其他答案所指出的那样,这在通用操作系统中也是可行的。在Windows中,这是WinAPI SetFileTime函数提供的,您可以utime在Linux上执行此操作。诸如此类的工具都touch建立在这些API之上。

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


0

以我的经验,曾经使用一台或多台计算机修改文件,而其中一台计算机的系统时间错误。导致系统时间错误的三种最常见原因(不分先后顺序)是:

  1. 并非所有计算机都配置为自动更改为夏时制。
  2. 人们“不小心”更改了计算机上的系统时间。
  3. 人们已经在开玩笑地“故意”改变了计算机上的系统时间。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.