Windows XP/Vista 中的文件创建日期不正确

Windows XP/Vista 中的文件创建日期不正确

看一下这个:

  1. 在 Windows 机器上创建一个新文件。
  2. 记下其创建日期/时间。
  3. 删除该文件。
  4. 稍等一下。
  5. 在同一目录下创建一个新文件,并与前一个文件同名。
  6. 新文件的创建日期/时间将与前一个文件的创建日期/时间相同!

我已经在 Windows XP SP3 和 Windows Vista SP2 x64 上验证了这一点。我很难相信这是一个错误。这真的是操作系统的错误吗?如果不是,为什么会出现这种情况?这让我很为难,因为我使用文件创建日期/时间来跟踪我们正在开发的自定义应用程序中的备份周期。

谢谢。

答案1

这似乎是一项名为“文件系统隧道”的记录功能。请参阅http://support.microsoft.com/kb/172190有关详细信息以及如何通过注册表设置禁用它。

答案2

我不认为这是一个错误,我认为这是设计使然。几个月前我自己也遇到过这种情况。

假设有一个应用程序会为您刚打开的文件创建一个临时的工作副本。在您工作时,您的更改会写入临时文件。当您完成并选择保存文件时,应用程序会删除原始文件并将临时文件重命名或复制到原始文件名。这种情况并不常见,但也并不罕见(许多旧的简单应用程序都以这种方式工作……文本编辑器等)。

在上述情况下,每次保存文件时,其创建日期总是与上次修改日期相匹配!

我不知道幕后到底发生了什么,也许有见解的人会提供更多细节。顺便说一句,有些文件系统根本不存储创建日期,只存储修改和访问日期(例如 ext2)。

更新:我从 xxcopy 的作者那里找到了以下内容,网址:http://www.xxcopy.com/xxcopy15.htm,这可能适用于你正在做的事情:

由于使用文件创建日期存在严重问题,因此我们通常不建议使用此日期

文件创建日期 (File-Create date) 有问题,

文件创建日期的问题可以追溯到微软各种文件管理实用程序的不一致。似乎
该功能的设计者从未明确定义文件日期值的三种不同变化的用途。作为软件开发人员,我们还没有见过关于这个问题的任何官方文件。

答案3

我猜想 Windows 很懒,当发现新文件中的其他所有内容都与旧文件中的相同时,它只是重新使用之前已标记为删除的文件系统表条目。

这种行为是有记录的这里

时间戳会在不同的时间因不同的原因而更新。关于文件时间戳的唯一保证是,当关闭进行更改的句柄时,文件时间能够正确反映。

(我强调)

编辑添加:我想你会想使用类似的东西设置文件时间在您的应用程序中创建该文件后。

答案4

我在 Windows 7 SP1 上使用 win32 DeleteFile 发现了这个问题。

尝试了一些技巧让它使用正确的“创建”日期,但没有什么效果。如果在删除文件后等待 2-3 分钟,然后创建新文件,日期就会正确。可能需要“刷新所有文件”win32 例程。

它可能会导致严重的错误,在我看来,这是非常不靠谱的事情,设计也很混乱。文件被删除了,消失了,不应该有这样的“重影”。如果你担心,建议使用win32 SetFileTime

相关内容