在Windows XP / Vista中不正确的文件创builddate

看一下这个:

  1. 在Windows机器上创build一个新文件
  2. 注意其创builddate/时间。
  3. 删除文件。
  4. 稍等一下
  5. 在同一个目录下创build一个新文件,名称与上一个相同。
  6. 新文件的创builddate和时间将等于上一个文件的创builddate和时间!

我已经在Windows XP SP3和Windows Vista SP2 x64上validation了这一点。 我觉得很难相信这是一个错误。 这是真的与操作系统的错误? 如果没有,为什么这种行为? 由于我使用文件创builddate/时间来跟踪我们正在开发的自定义应用程序中的备份周期,所以这给我一个很难的时间。

谢谢。

这似乎是一个被称为文件系统隧道的loggingfunction。 有关详细信息,请参阅http://support.microsoft.com/kb/172190以及如何通过registry设置禁用它。

我不认为这是一个错误,我认为这是一个devise。 几个月前我自己碰到了这个。

考虑一个应用程序,它可以创build刚刚打开的文件的临时工作副本。 在工作中,您的更改将写入临时文件。 完成并select保存文件后,应用程序将删除原始文件,并将临时文件重命名或复制为原始文件名。 这不是非常普遍,但并不罕见(许多旧的和简单的应用程序这样工作…文本编辑器等)。

在上面的情况下,每次保存文件时,其创builddate总是匹配上次修改的!

我不知道幕后发生了什么样的事情,也许有些有见识的人会提供更多的细节。 顺便说一下,一些文件系统根本不存储创builddate,只有修改和访问的date(例如ext2)。

更新:我从xxcopy的作者处find了以下内容,位于http://www.xxcopy.com/xxcopy15.htm ,这可能适用于您正在执行的操作:

由于文件创builddate的使用存在严重的问题,因此我们通常不鼓励使用此date

文件创builddate(File-Create date),问题

文件创builddate的问题可以追溯到Microsoft的各种文件pipe理工具中的不一致。 看来三个目的明显
文件date值的变化永远不会由特性的devise者明确定义。 我们作为软件开发者还没有遇到过这方面的官方文件。

我猜想Windows是懒惰的 – 在看到新文件中的其他内容与旧文件相同时 – 只是重用之前标记为删除的文件系统表项。

这种行为实际上logging在这里 。

时间戳在各种时间和各种原因被更新。 关于文件时间戳的唯一保证是文件时间在closures更改的句柄时被正确反映。

(我的重点)

编辑添加:我想你会想创build文件后在你的应用程序中使用像SetFileTime 。

我发现这与Windows 7 SP1的Win32 DeleteFile。

尝试了一些技巧,使其使用适当的“创build”的date,但没有喜悦。 如果您在删除文件后等待2-3分钟,然后创build新文件,date将是正确的。 可能需要“冲洗所有文件”的win32例程。

这可能会导致令人讨厌的错误,在我看来,这是相当棘手的事情,不整洁的devise。 该文件被删除了,不应该有这样的“重影”。 如果你担心build议使用win32 SetFileTime