观看文件夹和子文件夹以进行文件更改,这不是检测更改

Watching folders and subfolders for file changes is not detecting changes

本文关键字:文件夹 这不是 检测 文件      更新时间:2023-10-16

我想做的事情:监视给定文件夹及其所有子文件夹,以了解其文件concontents的任何更改(在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"文件夹中的文件进行更改(并保存(更改。但是,我的程序中什么都没有发生。根本没有显示消息,而我希望显示"更改"。

我在做什么错?

当我有问题时,我会做某些事情。我经常添加代码,这些代码在事物可能出错时会撰写相关信息;不是当我期望某件事出现问题时,而是可以出现问题时。因此,我测试了您的代码,i 自动向交换机添加了一个默认值。我的输出是默认情况下的输出的完整,我假设表示WaitforsingleObject的故障。因此,我注意到您正在使用dwchangehandles [0],以进行findfirstchangenotification和waitforsingleobject中的findfirstchangenotification和dwchangehandles。当我将dwchangehandles更改为dwchangehandhandles [0],然后对我有用。

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