【问题标题】:How to debug file change notifications obtained by FindFirstChangeNotification?如何调试 FindFirstChangeNotification 获得的文件更改通知?
【发布时间】:2009-02-02 14:36:19
【问题描述】:

所以,问题是:我收到了一些我不想收到的通知。但我不知道我得到它们的文件/目录。有没有办法知道为什么给定的通知被触发?

如果您考虑 ReadDirectoryChangesW,请包含一个有意义的代码示例。

【问题讨论】:

  • 使用 ReadDirectoryChangesW 有什么难的?

标签: c++ debugging winapi notifications


【解决方案1】:

如果您希望 Windows 告诉您更改了哪些特定文件或子目录,您需要使用 ReadDirectoryChangesW。如果使用完成例程,异步模式相当简单。

另一方面,通过使用稍微复杂的I/O completion ports 方法,您可能会获得更好的性能。我建议下载 Wes Jones 出色的 CDirectoryChangeWatcher 源代码作为起点。他的代码可以帮助您避免几个问题,尤其是在解析 FILE_NOTIFY_INFORMATION 记录时。

【讨论】:

    【解决方案2】:

    ~伪代码

    HANDLE handles[MAX_HANDLES];
    std::string dir_array[MAX_HANDLES];
    
    for i from 0 to MAX_HANDLES:
       h[i] = FindFirstChangeNotification(dir_array[i]...);
    
    nCount = MAX_HANDLES;
    ret = WaitForMultipleObjects(handles, nCount ...);
    
    // check if ret returns something between WAIT_OBJECT_0 and WAIT_OBJECT_0+nCount-1
    if "so":
      ret -= WAIT_OBJECT_0;
      cout << "Directory " << dir_array[ret] << " changed" << endl;
    

    见:http://msdn.microsoft.com/en-us/library/ms687025(VS.85).aspx

    【讨论】:

      【解决方案3】:

      看专业的Win32 api新闻组新闻://comp.os.ms-windows.programmer.win32 用于著名的 MS 示例(C 代码)(自 90 年代...)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 2015-12-10
        • 2021-05-03
        • 2019-07-10
        • 2018-10-05
        • 1970-01-01
        • 2012-06-21
        相关资源
        最近更新 更多