VC++文件監(jiān)控之FindFirstChangeNotification
更新時(shí)間:2019年04月07日 22:55:07 投稿:mdxy-dxy
因?yàn)镽eadDirectoryChangesW 上次測試發(fā)現(xiàn)不能多級目錄監(jiān)控,所以嘗試用FindFirstChangeNotification來實(shí)施文件監(jiān)控,需要的朋友可以參考下
原因:
因?yàn)镽eadDirectoryChangesW 上次測試發(fā)現(xiàn)不能多級目錄監(jiān)控,
所以嘗試用FindFirstChangeNotification來實(shí)施文件監(jiān)控。
關(guān)鍵代碼:
CFolderMonitorDlg *dlg = (CFolderMonitorDlg*)lParam;
HANDLE hEvent;//監(jiān)控句柄
CString path ;//監(jiān)控目錄
GetCurrentDirectory(MAX_PATH,path.GetBuffer(MAX_PATH+1));
hEvent = FindFirstChangeNotification(path,TRUE,FILE_NOTIFY_CHANGE_FILE_NAME| //查看指定目錄下任何文件名的改變
FILE_NOTIFY_CHANGE_DIR_NAME| //查看指定目錄下任何目錄名的改變
FILE_NOTIFY_CHANGE_SIZE| //查看指定文件大小的改變
FILE_NOTIFY_CHANGE_ATTRIBUTES);//查看指定目錄下文件屬性的改變
if (hEvent == INVALID_HANDLE_VALUE)
{
ExitProcess(GetLastError());//獲取錯(cuò)誤
return 0 ;
}
while (TRUE)//循環(huán)監(jiān)控
{
DWORD nObj = WaitForSingleObject(hEvent,INFINITE);//等待,文件夾任何動作,都返回0,顧不能知道具體動作和具體哪個(gè)文件發(fā)生了變化 if (nObj)
{
dlg->m_edit.ReplaceSel("被病毒修改了文件\r\n");
}
dlg->m_edit.ReplaceSel("文件發(fā)生了變化,具體發(fā)生什么變化,無從考證\r\n");
//繼續(xù)監(jiān)控
if(FALSE==FindNextChangeNotification(hEvent))
{
ExitProcess(GetLastError());
return 0;
}
}
return 0 ;
效果圖:

最后:
因?yàn)榇a很少,就不介紹了。
相關(guān)文章
C++實(shí)現(xiàn)學(xué)校運(yùn)動會管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)校運(yùn)動會管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
C++?計(jì)算時(shí)間差的五種方法小結(jié)
本文主要介紹了C++?計(jì)算時(shí)間差的五種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
C語言中const,volatile,restrict的用法總結(jié)
以下是對C語言中const,volatile,restrict的用法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下2013-10-10
關(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解
下面小編就為大家?guī)硪黄P(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
c語言獲取用戶輸入字符串是scanf和gets的區(qū)別詳解
今天小編就為大家分享一篇c語言獲取用戶輸入字符串是scanf和gets的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07

