c++监控目录文件变化失败,求解答
自己研究了半天,弄成这个样子了,测试发现部分文件发生变化后,没有复制到C盘,具体操作如下
1、D盘中新建一个doc文件,这时C盘也自动新建了个
2、打开D盘的doc文件,修改内容,这时C盘中自动建的那个却没有按照设想的那样自动复制D盘的那个过去,而是和步骤一的文件一样(打开用office和wps都测试过了)
3、D盘中新建一个txt文件,这时C盘有相应的txt文件了
4、打开D盘的txt文件,修改内容,这时D盘里的txt文件自动覆盖到了C盘,打开C盘的txt,内容和D盘中一样
求解答,为什么步骤2的那个没有自动覆盖到C盘,感谢解答
#include <windows.h>c++ c 目录监控 目录同步 文件同步
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include "io.h"
#include <iostream>
using namespace std;
bool Monitor();
int main()
{
Monitor();
system("pause");
return 0;
}
bool Monitor()
{
HANDLE hFile = CreateFile("D://",FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
if ( INVALID_HANDLE_VALUE == hFile )
return false;
char buf[2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH)];
FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION*)buf;
DWORD BytesReturned;
while(true)
{
if (ReadDirectoryChangesW(hFile,pNotify, sizeof(buf), true, FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_SIZE|FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME|FILE_NOTIFY_CHANGE_ATTRIBUTES|FILE_NOTIFY_CHANGE_LAST_ACCESS|FILE_NOTIFY_CHANGE_CREATION|FILE_NOTIFY_CHANGE_SECURITY, &BytesReturned, NULL, NULL))
{
char tmp[MAX_PATH];
memset(tmp,0,sizeof(tmp));
WideCharToMultiByte(CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL);
char src_file[MAX_PATH];
strcpy(src_file,"D:\");
strcat(src_file,tmp);
char dst_file[MAX_PATH];
strcpy(dst_file,"C:\");
strcat(dst_file,tmp);
printf("%s\n",src_file);
fstream _file;
_file.open(src_file,ios::in);
if (_file)
{
printf("%s\n",dst_file);
CopyFile(src_file,dst_file,false);
}
else
{
_unlink(dst_file);
}
_file.close();
}
else
{
break;
}
Sleep(500);
}
return true;
}