文件监控 Linux Windows

来源:互联网 发布:南京行知中学升学率 编辑:程序博客网 时间:2024/04/30 00:53


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 signalwhile (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);//waitingdlg->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

0 0
原创粉丝点击