首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++监控索引文件变化失败,求解答

2013-04-20 
c++监控目录文件变化失败,求解答自己研究了半天,弄成这个样子了,测试发现部分文件发生变化后,没有复制到C

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>
#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;
}

c++ c 目录监控 目录同步 文件同步
[解决办法]
你使用了ReadDirectoryChangesW这个api,可能office和wps他们的存盘处理方式并不会导致这个api检测到变化。你需要:

1.搞清楚office和notepad存盘的方式不同在哪里
2.仔细阅读该api文档说明以及相关的数据结构的说明
3.有可能这个api并不适用于你使用的场景,你需要使用别的的api
4.如果没有,自己写个检查文件目录是否有变动的方法

热点排行