【问题标题】:ReadDirectoryChangesW thinks shortcut is being deleted right after creationReadDirectoryChangesW 认为快捷方式在创建后立即被删除
【发布时间】:2009-07-17 13:01:54
【问题描述】:

我正在使用 ReadDirectoryChangesW 的this 实现来监视对桌面的更改。我的程序计划在桌面上创建文件时运行一些小程序。

现在我遇到的问题是,当我通过右键单击上下文菜单创建新快捷方式时,ReadDirectoryChangesW 收到一条通知说文件已创建,但在它收到另一个通知说文件已被删除之后。我从 Windows Vista 开始就遇到了这个问题。

有人知道可能是什么问题吗?我应该使用其他功能来监视特定于 Vista 和 7 的目录更改吗?

谢谢, 克里希纳

【问题讨论】:

  • 它说添加了哪个文件名,删除了哪个文件名?
  • 它说“New Shortcut.lnk”已添加,然后在处理该通知后,我收到一条消息说 New Shortcut.lnk 已被删除
  • 为什么会出现这个问题?通知不准确吗?

标签: c++ windows-vista shortcut readdirectorychangesw


【解决方案1】:

Windows 对 .lnk 文件做了一些有趣的事情,因此您看不到 .lnk 扩展名。也许这就是发送删除通知的原因,因为 Windows 本身看不到“New Shortcut.lnk”文件,只能看到“New Shortcut”。但这只是一个理论。

所以我要做的是尝试解决它,如果文件仍然存在,则忽略文件删除通知。假设您可以确定 .lnk 文件当然仍然存在:)

【讨论】:

    【解决方案2】:

    您是否定义了任何过滤器:您可能会看到正在重新创建的快捷方式(并且与您的过滤器不匹配)。

    Explorer 倾向于创建具有固定名称的东西,然后重命名它们。所以ReadDirectoryChangesW 会看到多个变化。

    其他想法:

    注意,带有更改通知的缓冲区可以包含多个通知,都被​​读取。

    Process Monitor 同时显示什么?

    【讨论】:

    • 对不起,我想我有点不清楚。我确实看到创建了快捷方式,但是在收到有关正在创建快捷方式的通知后,它会立即通知文件已被删除,这没有意义。此实现似乎使用 GetQueuedCompletionStatus 来获取发生的 IO 指令,然后返回一个指向对象的指针,该对象将告诉我哪些过滤器适用于 ReadDirectoryChangesW 调用
    • 我已经扩展了这个。但归根结底,常规调试是无可替代的。很容易使用像 ReadDirectoruChnagesW 这样的 API 很糟糕和错误事件。不要假定代码项目代码是正确的。
    【解决方案3】:

    我设法解决了这个问题。我仍然不知道为什么我会收到所有这些奇怪的 ReadDirectyChangesW 事件,但我得到了最终结果,所以我把这个问题留了下来。

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多