如何在Windows中移动文件而不更改目标父文件夹的修改时间(Win32)?

看来,当您从某个源文件夹移动/复制文件到某个目标文件夹时,Windows往往会更改父文件夹的修改时间。

对于副本,它会将目标的父文件夹修改时间更改为现在。

对于一个移动,它看起来像改变了源的父文件夹和目的地的父文件夹修改时间。

这是在NTFS上。

我认为这是因为NTFS正在更新文件夹元数据中的目录索引条目。

如何使用Win32 API在不改变源/目标父文件夹的修改时间的情况下在Windows中复制或移动文件?

SetFileInformationByHandle应该允许您将修改时间恢复为您找到它的方式。 如有必要,您可以使用交易,以避免重叠的变化的风险。

但是,我相信只有在启用了SE_RESTORE权限的情况下,才能更改目录上的时间戳,因此您需要以管理员身份运行。 (注意:这不是因为你需要指定FILE_FLAG_BACKUP_SEMANTICS到CreateFile来获得一个目录句柄,你可以做到这一点,没有特殊的权限。

在另一端处理这个问题可能更有意义,也就是说,修改任何代码或程序由于修改时间改变而变得不安。 毕竟,文件夹的内容改变时,文件夹的修改时间应该改变 – 这就是它的目的!