我想做什么:监控给定文件夹及其所有子文件夹,查看其文件内容的任何变化(在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”中的文件进行(并保存)更改。但是,我的程序没有任何反应。根本没有显示任何消息,而我希望显示“已更改”。
我做错了什么?
答案 0 :(得分:0)
当我遇到问题时,我会做某些事情。我经常添加代码,当可能出错时写出相关信息;不是在我预料到出错的时候,而是当可能出错时。所以我测试了你的代码,我自动为交换机添加了一个默认值。我的输出是默认情况下输出的完整,我假设指示WaitForSingleObject失败。所以我注意到你正在使用dwChangeHandles [0]来查找WaitForSingleObject中的FindFirstChangeNotification和dwChangeHandles的结果。当我将dwChangeHandles更改为dwChangeHandles [0]时,它对我有用。
有时候我们忽略了简单,因为我们期望它很难。