FindFirstChangeNotification两次通知有关更改

Ofe*_*fer 3 c++ windows winapi

我想监视文件系统中的文件夹.假设我要监视文件夹:C:\ MyNewFolder

我有这个代码来做到这一点:

HANDLE  ChangeHandle=FindFirstChangeNotification(_T("C:\\\MyNewFolder"),FALSE,FILE_NOTIFY_CHANGE_LAST_WRITE);
for(;;)
{
    DWORD Wait=WaitForSingleObject(ChangeHandle,INFINITE);
    if (Wait == WAIT_OBJECT_0)
    {
        MessageBox(NULL,_T("Change"),_T("Change"),MB_OK);
        FindNextChangeNotification(ChangeHandle);
    }
    else
    {
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个消息框,通知我文件夹中的任何文件更改.该代码工作正常,但我有一个问题.问题是我每次更改都收到2次通知.我的代码有什么问题?谢谢.

Han*_*ant 8

这完全正常.对文件的更改通常涉及对文件数据的更改以及对目录条目的更改.文件长度和上次写入日期等元数据属性存储在那里.所以你会收到两者的通知.ReadDirectoryChangesW()没有区分这两者.

这与对同一文件进行多次更改的过程没有什么不同.一定要能够处理这两个条件.这通常涉及一个计时器,因此您不会过度使用您在通知上执行的操作数量.这样的计时器通常也是必需的,因为正在更改文件的进程仍然锁定它会阻止您对该文件执行任何操作.在进程关闭文件之前,以后会有不确定的时间.