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