文件监控 Linux Windows



Linux  :   inotify


Windows: ReadDirectoryChangesW

UINT ThreadWatcher(LPVOID pParam){

	CFileWatcherDlg * dlg = (CFileWatcherDlg*)pParam;
//	dlg->MessageBox(dlg->m_dir);

	HANDLE hDir; 
	char notify[1024]; 
	DWORD cbBytes; 
	CString path = dlg->m_dir;

	FILE_NOTIFY_INFORMATION *pNotify=(FILE_NOTIFY_INFORMATION *)notify; 

//	GetCurrentDirectory(MAX_PATH,path.GetBuffer(MAX_PATH+1));
    hDir = CreateFile( path, FILE_LIST_DIRECTORY,
        FILE_SHARE_READ | 
        FILE_SHARE_WRITE | 
        FILE_SHARE_DELETE, NULL, 
        OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | 
        FILE_FLAG_OVERLAPPED, NULL); 
    if (hDir == INVALID_HANDLE_VALUE) 
    { 
		dlg->PrintMsg("hDir:INVALID_HANDLE_VALUE,获得目录句柄失败,请选择正确的目录.");
        //dlg->m_edit.ReplaceSel("hDir:INVALID_HANDLE_VALUE\r\n");
        return -1;
    } 
	CString str;
	
	WCHAR  wcFileName[1024]={0};
	DWORD dwFileNameLength ;
	char cFileName[1024] = {0};

	SetEvent(eventStarted);//release signal
	while (TRUE) 
    { 
		if(!dlg->bWatching)
			break;
        if(ReadDirectoryChangesW(hDir, ¬ify, sizeof(notify),
            true, FILE_NOTIFY_CHANGE_FILE_NAME| FILE_NOTIFY_CHANGE_LAST_WRITE  , 
            &cbBytes, NULL, NULL)) 
        { 
 
		//	dlg->MessageBox("re");
			dwFileNameLength = pNotify->FileNameLength;  
			memset(wcFileName, 0 , 1024);
			memcpy( wcFileName, pNotify->FileName, dwFileNameLength );
			WideCharToMultiByte( CP_ACP, 0, wcFileName, -1, cFileName, 1024, NULL, NULL );
			
            switch(pNotify->Action) 
            { 
            case FILE_ACTION_ADDED: 
				str.Format("Directory/File added - %s",cFileName);
                break; 
            case FILE_ACTION_REMOVED:
				str.Format("Directory/File removed - %s",cFileName);
                break; 
            case FILE_ACTION_MODIFIED: 
				WaitForSingleObject(hMutex,-1);//waiting
				dlg->m_images.push_back(path+"\\"+cFileName);
				str.Format("STL list size=%d ", dlg->m_images.size());
				dlg->PrintMsg(str);
				ReleaseMutex(hMutex);//release 
				str.Format("Directory/File modified - %s",cFileName);
                break; 
            case FILE_ACTION_RENAMED_OLD_NAME: 
				str.Format("Directory/File rename - %s",cFileName);
                break; 
            case FILE_ACTION_RENAMED_NEW_NAME: 
				str.Format("Directory/File new name - %s",cFileName);
                break; 
            default: 
                break; 
            } 
			dlg->PrintMsg(str);
			
        }
    }
	dlg->PrintMsg("End Watcher");
	return 0;
}

其他:

通过rsync+inotify实现数据的实时备份  http://ixdba.blog.51cto.com/2895551/580280/

Linux inotify功能及实现原理  

http://blog.csdn.net/myarrow/article/details/7096460


Linux  :   inotify

Windows: ReadDirectoryChangesW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值