【发布时间】:2016-03-18 13:27:40
【问题描述】:
尝试这个我发现了一个奇怪的问题:
- 删除旧文件。
- 创建一个新文件并将其命名为与旧文件相同。
然后将新文件的“创建时间”属性设置为旧文件的“创建时间”。为什么会这样?怎么做?
【问题讨论】:
标签: windows filesystems
尝试这个我发现了一个奇怪的问题:
然后将新文件的“创建时间”属性设置为旧文件的“创建时间”。为什么会这样?怎么做?
【问题讨论】:
标签: windows filesystems
NT 文件系统不会删除您认为删除的文件。当您删除 NT 文件系统上的文件时,操作系统只会将该文件占用的磁盘空间标记为可用。在将另一个文件写入磁盘上的该位置之前,该文件不会被真正删除。
至于为什么 Windows 会认为它是同一个文件,我相信这是因为当你删除它时文件是空的,所以在相同的位置创建一个具有相同名称和相同的新文件(空) 内容使 Windows 认为它实际上是同一个文件。我认为这是一个错误。
附带说明,Windows 以这种方式处理文件删除的事实正是您能够使用文件恢复实用程序来恢复已删除文件的原因。
【讨论】:
这是由于 file system tunnelling,正如 Raymond Chen 所解释的那样:
“为什么会存在隧道?
当您使用程序编辑现有文件然后保存它时,您希望保留原始创建时间戳,因为您正在编辑文件,而不是创建新文件。但在内部,许多程序通过执行保存、删除和重命名操作的组合来保存文件(例如链接文章中列出的那些),并且如果没有隧道,文件的创建时间似乎会发生变化,即使从最终用户的观点,没有文件被创建。
作为隧道重要性的另一个示例,请考虑文件“长名称.txt 文件”,其短名称为“FILEWI~1.TXT”。您将此文件加载到不支持长文件名的程序中并保存。它删除旧的“FILEWI~1.TXT”并创建一个具有相同名称的新文件。如果没有隧道,文件的相关长名称将会丢失。文件名不是一个友好的长名称,而是用波浪形的标记损坏了这个东西。不好。”
【讨论】:
您可以使用此命令手动更新创建时间:
powershell (ls YourFile.txt).CreationTime = Get-Date
...和批处理文件中的相同:
call powershell "(ls YourFile.txt).CreationTime = Get-Date"
【讨论】: