【问题标题】:How to move a file in Windows without changing the destination parent folder's modification time (Win32)?如何在 Windows 中移动文件而不更改目标父文件夹的修改时间(Win32)?
【发布时间】:2012-02-22 18:27:41
【问题描述】:

似乎当您将文件从某个源文件夹移动/复制到某个目标文件夹时,Windows 倾向于更改父文件夹的修改时间。

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

对于移动,它似乎将源的父文件夹和目标的父文件夹修改时间都更改为现在。

这是在 NTFS 上。

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

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

【问题讨论】:

    标签: windows file-io last-modified


    【解决方案1】:

    SetFileInformationByHandle 应该允许您将修改时间恢复到您找到它的方式。如有必要,您可以使用事务以避免重叠更改造成混乱的风险。

    但是,我相信只有启用 SE_RESTORE 权限才能更改目录的时间戳,因此您需要以管理员身份运行。 (注意:这是不是,因为您需要将 FILE_FLAG_BACKUP_SEMANTICS 指定给 CreateFile 以获得目录句柄;您可以在没有特殊权限的情况下执行此操作。)

    在另一端解决问题可能更有意义,即修复因修改时间变化而变得不安的任何代码或过程。毕竟,文件夹的修改时间应该随着文件夹内容的改变而改变——这就是它的存在!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2015-04-04
      相关资源
      最近更新 更多