64,654
社区成员
发帖
与我相关
我的任务
分享
// 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(¬ification,0,sizeof(FILE_NOTIFY_INFORMATION));
DWORD BytesReturned;
BOOL watch_state;
while (TRUE)
{
watch_state=ReadDirectoryChangesW(in_directory,
(LPVOID)¬ification,
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);//函数能检测到目录中文件变更,但是查不到任何返回的信息,这里输出该函数的返回信息字节数每次都为0,这是为什么呢?
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");
}
}
}
}