Windows 7 文件系统:大吃一惊 - 删除并重新创建文件:创建时间没有改变!原因是什么以及如何修复?

Windows 7 文件系统:大吃一惊 - 删除并重新创建文件:创建时间没有改变!原因是什么以及如何修复?

我需要更新创建时间删除并重新创建虚假文件,将其时间设置为“现在”。奇怪的是,新创建的文件看起来继承了原始文件的创建时间!

让我演示一下:

> touch a.txt       //create a new file
> dir /T:C          //creation time
02/27/2013  02:04 PM                 0 a.txt

> dir /T:W          //modification time
02/27/2013  02:04 PM                 0 a.txt

//wait a bit...
> touch a.txt       //update modified-time
> dir /T:C
02/27/2013  02:04 PM                 0 a.txt

> dir /T:W          //mod-time changed, as expected
02/27/2013  02:05 PM                 0 a.txt

> del a.txt
> touch a.txt       //recreate file
> dir /T:C          //same original ctime !!
02/27/2013  02:04 PM                 0 a.txt

> dir /T:W          //the actual time the 2nd file was created
02/27/2013  02:06 PM                 0 a.txt

> del a.txt
> touch b.txt       //ok, create a file with a different name
> dir /T:C          //ctime as expected
02/27/2013  02:07 PM                 0 b.txt

> mv b.txt a.txt
> dir /T:C          //again, ctime of original file!
02/27/2013  02:04 PM                 0 a.txt

> del a.txt
> touch c.txt       //create a file with a different name, again
> dir /T:C          //ctime as expected
02/27/2013  02:08 PM                 0 c.txt

> cp c.txt a.txt    //this time copy it...
> dir /T:C          //ctime of a.txt is that of original file!
02/27/2013  02:04 PM                 0 a.txt
02/27/2013  02:08 PM                 0 c.txt

//wait longer...

> del *
> touch d.txt
> dir /T:C
02/27/2013  02:22 PM                 0 d.txt

> cp d.txt a.txt
> dir /T:C          //lo and behold, the ctime has changed.
02/27/2013  02:22 PM                 0 a.txt
02/27/2013  02:22 PM                 0 d.txt

我的演示到此结束。有两个问题需要解决:

wtf?!

  1. ^^^ 他说的话。

  2. 我该如何修复它?

好的,让我进一步阐述一下:

  1. 有人知道 Windows OS/NTFS 的内部机制是什么吗?看起来发生了一些文件元数据缓存,并且缓存失效是有时间限制的。

  2. 关于如何获得与原始文件同名的全新文件,并保持最新状态,ctime您有什么建议吗?欢迎提出任何建议,无论是批处理脚本、注册表黑客、编程还是其他什么。

答案1

答案:

  1. 该过程称为“文件系统隧道”(源自量子力学),据我所知,它最初是为 Win95 设计的。操作系统有必要处理程序仅保存并覆盖文件的情况。在这种情况下,用户通常希望创建日期(和短文件名)不会改变,但如果没有隧道,创建日期将反映上次保存时间。请参阅:关于 Windows 文件时间的一些提醒文件系统隧道的秘密历史
  2. 有两种方法可以解决此问题:
  • 保存/创建后立即修改创建时间
  • 通过注册表设置(针对整个操作系统):

文件隧道设置由 Windows 注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 控制。

要增加隧道缓存时间,请修改/添加 DWORD 值 MaximumTunnelEntryAgeInSeconds。默认缓存时间为 15 秒。要禁用隧道,请修改/添加 DWORD 值 MaximumTunnelEntries 并将其设置为 0。

答案2

我不使用 Windows,但我认为我找到了一种解决方法。

  1. Win32 显然允许修改文件创建时间, 使用设置文件时间功能。

  2. 如果你没有使用 Win32 编写应用程序,你应该能够使用 PowerShell。基于类似的 stackoverflow 答案

    C:\> powershell  (ls your-file-name-here).CreationTime = Get-Date
    

答案3

使用 atime,而不是 ctime。访问时间实际上是创建时间,因为它不会在访问时更新不再

相关内容