file - 重命名和重新创建文件时出现奇怪的时间戳重复

标签 file windows-7 timestamp creation last-modified

我正在尝试将名为 appname.log 的日志文件重命名为 appname_DDMMYY.log 形式以进行归档,并重新创建一个空的 appname.log 以供进一步写入。在 Windows 7 中使用 C++ 和 WinAPI 或 Qt 调用(内部可能相同)执行此操作时,新创建的 .log 文件奇怪地从重命名的文件继承时间戳(上次修改、创建)。
在 Windows 资源管理器中重命名文件并随后在同一目录中快速创建同名文件时,也可以观察到这种行为。但它必须快速完成。单击“新文本文件”后,时间戳正常,但在重命名后,它们更改为重命名文件具有或仍然具有的时间戳。

这是某种Bug吗?如何重命名文件并在不久之后重新创建它而不会弄乱时间戳?

最佳答案

这看起来是设计使然,也许是为了尝试保留“原子保存”的时间。如果应用程序执行类似操作(保存到临时文件、删除原始文件、将临时文件重命名为原始文件)来消除文件损坏的风险,则每次保存文件时,创建时间都会增加。您编辑多年的文件似乎是今天创建的。这种保存模式很常见。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724320(v=vs.85).aspx
如果您重命名或删除一个文件,然后在此后不久恢复它,Windows 将在缓存中搜索要恢复的文件信息。缓存信息包括其短/长名称对和创建时间。
请注意,修改时间不会恢复。所以保存后文件好像被修改了,创建时间和之前一样。

如果您创建“a-new”并将其重命名回“a”,您将获得“a”的旧创建时间。如果删除“a”并重新创建“a”,则会得到“a”的旧创建时间。

关于file - 重命名和重新创建文件时出现奇怪的时间戳重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285523/

相关文章:

java - Eclipse.exe 运行问题 - 退出代码 13

c++ - 自动更改 C++11 中的含义;请删除它这是什么意思?

java - 文件安装程序包所需的方法/类

java - 如何从位置读取文本文件

c - 如何用 C 编程语言将随机访问文件中的记录放入数组中?

testing - 我怎样才能得到旧的浏览器?(用于测试)

windows-7 - 如何从命令行或系统调用打开 "Performance Options"对话框

来自数据库的 PHP 日期作为时间戳 - 添加 X 小时

php - 我的时间戳有什么问题吗?

swift - 在 Swift 3 中读取 txt 文件