查看文件更改的文件夹和子文件夹不会检测到更改

时间:2017-04-24 18:59:11

标签: c++ windows file watch

我想做什么:监控给定文件夹及其所有子文件夹,查看其文件内容的任何变化(在Windows中,使用C ++)。

我尝试过:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>


void WatchFileChanges(char *dir) {

while (true)
{
    HANDLE dwChangeHandles[1];

    dwChangeHandles[0] = FindFirstChangeNotification(
        dir,                         // directory to watch 
        FALSE,                         // do not watch subtree 
        FILE_NOTIFY_CHANGE_LAST_WRITE); // watch file name changes

    auto res = WaitForSingleObject(dwChangeHandles, INFINITE);

    switch (res)
    {
    case WAIT_OBJECT_0: std::cout << "changed" << std::endl; break;
    case WAIT_TIMEOUT: std::cout << "time's up" << std::endl; break;
    }
}
}

int main()
{
    WatchFileChanges("D:/myfolder");
    return 0;
}

我运行上面的代码并尝试对文件夹“D:/ myfolder”中的文件进行(并保存)更改。但是,我的程序没有任何反应。根本没有显示任何消息,而我希望显示“已更改”。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

当我遇到问题时,我会做某些事情。我经常添加代码,当可能出错时写出相关信息;不是在我预料到出错的时候,而是当可能出错时。所以我测试了你的代码,我自动为交换机添加了一个默认值。我的输出是默认情况下输出的完整,我假设指示WaitForSingleObject失败。所以我注意到你正在使用dwChangeHandles [0]来查找WaitForSingleObject中的FindFirstChangeNotification和dwChangeHandles的结果。当我将dwChangeHandles更改为dwChangeHandles [0]时,它对我有用。

有时候我们忽略了简单,因为我们期望它很难。