首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于ReadDirectoryChangesW多次通知?该如何处理

2012-01-12 
关于ReadDirectoryChangesW多次通知???我只修改一次文件,为什么下面代码会打印多次呢??C/C++ code#include

关于ReadDirectoryChangesW多次通知???
我只修改一次文件,为什么下面代码会打印多次呢??

C/C++ code
#include <stdio.h>#include <Windows.h>int _tmain(int argc, _TCHAR* argv[]){    HANDLE hand = CreateFile(           "D:\\Test",                      FILE_LIST_DIRECTORY,         FILE_SHARE_READ|FILE_SHARE_DELETE,        NULL,        OPEN_EXISTING,        FILE_FLAG_BACKUP_SEMANTICS,        NULL        );    char   notify[1024] = {0};       FILE_NOTIFY_INFORMATION   *pnotify=(FILE_NOTIFY_INFORMATION   *)notify;       DWORD   cbBytes;       while(true)       {           BOOL ret = ReadDirectoryChangesW(hand,            &notify,               sizeof(notify),               TRUE,               FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_FILE_NAME,            &cbBytes,               NULL,               NULL);        if(ret)           {               char   AnsiChar[1024] = {0};            WideCharToMultiByte(CP_ACP,0,pnotify->FileName,pnotify->FileNameLength/2,AnsiChar,1024,NULL,NULL);            if(FILE_ACTION_MODIFIED   ==   pnotify->Action)               {                printf("%s Modified\n",AnsiChar);//为什么会打印多次???            }            else if (FILE_ACTION_ADDED == pnotify->Action)            {                printf("%s Add\n",AnsiChar);            }            else if (FILE_ACTION_REMOVED == pnotify->Action)            {                printf("%s Removed\n",AnsiChar);            }        }    }    return 0;}


[解决办法]
改成这样试试:

C/C++ code
if(true)       {           BOOL ret = ReadDirectoryChangesW(hand,            &notify,               sizeof(notify),               TRUE,               FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_FILE_NAME,            &cbBytes,               NULL,               NULL);        if(ret)           {               char   AnsiChar[1024] = {0};            WideCharToMultiByte(CP_ACP,0,pnotify->FileName,pnotify->FileNameLength/2,AnsiChar,1024,NULL,NULL);            if(FILE_ACTION_MODIFIED   ==   pnotify->Action)               {                printf("%s Modified\n",AnsiChar);//为什么会打印多次???            }            else if (FILE_ACTION_ADDED == pnotify->Action)            {                printf("%s Add\n",AnsiChar);            }            else if (FILE_ACTION_REMOVED == pnotify->Action)            {                printf("%s Removed\n",AnsiChar);            }        }    }
[解决办法]
像word,excel等分块写入的软件当然会多次通知。而且改名,复制,新建都会多出一个Modify通知。

热点排行