我只修改一次文件,为什么下面代码会打印多次呢??#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;
}

解决方案 »

  1.   

    改成这样试试:
    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);
                }
            }
        }
      

  2.   

    像word,excel等分块写入的软件当然会多次通知。而且改名,复制,新建都会多出一个Modify通知。
      

  3.   

    还有个问题"C:\Documents and Settings\Administrator\Application Data"为什么CreateFile出错呀????