【问题标题】:Is it possible to artificially trigger ReadDirectoryChangesW?是否可以人为触发 ReadDirectoryChangesW?
【发布时间】:2020-03-17 00:36:44
【问题描述】:

我正在创建一个用于更改文件元数据的应用程序。我希望元数据编辑不会影响文件的修改日期,所以我想通过这样做来抑制修改日期更改:

FILETIME ft = { 0xFFFFFFFF, 0xFFFFFFFF };
SetFileTime(hFile, NULL, NULL, &ft);

唯一的缺点是这显然会导致ReadDirectoryChangesW 没有被触发,因此更改不会在 Dropbox 之类的东西上同步。我想知道是否有办法抑制修改日期更改,但也可以人为触发 ReadDirectoryChangesW 以便修改注册。换句话说,两全其美。那可能吗?非常感谢您提供任何信息。

【问题讨论】:

  • 您正在修改文件。为什么不希望修改更新文件的最后修改时间戳?对我来说,这听起来像是 XY problem
  • 是的,我想你是对的。
  • 我不确定您所说的文件元数据是什么意思,但如果您正在写入 ADS,我非常怀疑 Dropbox 是否会同步这些数据。
  • @rem:您真的希望您的最后一次修改时间戳在您的反恶意软件解决方案完成扫描文件时更新吗?
  • @IInspectable 扫描文件不会修改文件,除非感染被删除。 OP明确表示正在修改目标文件。

标签: c++ windows shell winapi metadata


【解决方案1】:

不,您不能人为触发ReadDirectoryChangesW(),尤其是在您不是听众的情况下。 ReadDirectoryChangesW() 正在监控文件系统本身,所以只有真正的文件系统事件才会触发它。

【讨论】:

  • 听起来不错,但我有最后一个想法(尽管我似乎无法让它发挥作用)。如果您不使用FILETIME ft = { 0xFFFFFFFF, 0xFFFFFFFF };,而是获取并存储当前修改日期,然后更新文件,然后应用存储的修改日期,该怎么办?理论上不行吗?
  • @loop123123 你可以,但这会引入竞争条件。更新文件会触发事件,但谁能说在您有机会重置时间戳之前监听器不会对事件采取行动?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 2011-09-06
  • 2016-01-14
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多