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