读书人

关于ReadDirectoryChangesW函数的有关

发布时间: 2012-08-17 02:08:34 作者: rapoo

关于ReadDirectoryChangesW函数的问题,大家快来帮忙啊
该函数第二个参数中应该记录了函数返回的一些信息,但是我的程序总是得不到,不知道为什么,求高人指点。谢谢!

C/C++ code
// WatchFile.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void WatchDirectory(LPTSTR);ofstream WriteLog("History.log");//创建输入流对象,并绑定log文件//time_t ChangeTime;//用于记录修改时间的变量int _tmain(int argc, _TCHAR* argv[]){    wchar_t dir[]=L"e:\\MyFile\\Test";    LPTSTR Directory=(LPTSTR)dir;    _tprintf(L"%s\n",Directory);    //检查log文件是否正确打开    if(!WriteLog)    {        MessageBox(NULL,TEXT("Faild to open the file!"),TEXT("Error"),0);        return -1;    }    else    {        WatchDirectory(Directory);    }    system("pause");    return 0;}void WatchDirectory(LPTSTR lpDir){    LPCTSTR WatchDirectory=lpDir;//    //创建一个目录句柄    HANDLE in_directory=CreateFile(WatchDirectory,        FILE_LIST_DIRECTORY,        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,        NULL,        OPEN_EXISTING,        FILE_FLAG_BACKUP_SEMANTICS,        NULL);    if(in_directory==INVALID_HANDLE_VALUE)    {        DWORD ERROR_DIR=GetLastError();        MessageBox(NULL,TEXT("打开目录错误!"),TEXT("HelloMsg"),0);    }    FILE_NOTIFY_INFORMATION Notification;    memset(&Notification,0,sizeof(FILE_NOTIFY_INFORMATION));    DWORD BytesReturned;    BOOL watch_state;    while (TRUE)    {        watch_state=ReadDirectoryChangesW(in_directory,            (LPVOID)&Notification,            sizeof(FILE_NOTIFY_INFORMATION),            TRUE,            FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME|FILE_NOTIFY_CHANGE_LAST_WRITE,            &BytesReturned,            NULL,            NULL);        if (GetLastError()==ERROR_INVALID_FUNCTION)        {            printf("系统不支持");        }        else if(watch_state==0)        {            printf("监控失败");        }        else        {            printf("%s:%d",Notification.Action,BytesReturned);//[color=#FF0000]函数能检测到目录中文件变更,但是查不到任何返回的信息,这里输出该函数的返回信息字节数每次都为0,这是为什么呢?[/color]            if (Notification[0].Action==FILE_ACTION_ADDED)            {                printf("FILE_ACTION_ADDED");            }            if (Notification.Action==FILE_ACTION_REMOVED)            {                printf("FILE_ACTION_REMOVED");            }            if (Notification.Action==FILE_ACTION_MODIFIED)            {                printf("FILE_ACTION_MODIFIED");            }            if (Notification.Action==FILE_ACTION_RENAMED_OLD_NAME)            {                printf("FILE_ACTION_RENAMED_OLD_NAME");            }            if (Notification.Action==FILE_ACTION_RENAMED_NEW_NAME)            {                printf("FILE_ACTION_RENAMED_NEW_NAME");            }        }    }}


[解决办法]
ReadDirectoryChangesW
断点看看是否捕获到某种信息.
if (GetLastError()==ERROR_INVALID_FUNCTION)
{
printf("系统不支持");
}
else if(watch_state==0)
{
printf("监控失败");
}
else
{
是否能进入到这里面来.如果进入那就是判断条件有问题.如果错误那就是ReadDirectoryChangesW 创建文件监听失败的,再看看参数是否真确.

}

[解决办法]
CreateFile的参数好像填写错了吧?
[解决办法]
碰到这样的问题,第一反应是查MSDN

读书人网 >C++

热点推荐