ReadDirectoryChangesW监控目录文件操作
生活随笔
收集整理的這篇文章主要介紹了
ReadDirectoryChangesW监控目录文件操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 目錄監控多線程
UINT MonitorFileThreadProc(LPVOID lpVoid)
{char *pszDirectory = (char *)lpVoid;// 打開目錄, 獲取文件句柄HANDLE hDirectory = ::CreateFile(pszDirectory, FILE_LIST_DIRECTORY,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, NULL);if (INVALID_HANDLE_VALUE == hDirectory){ShowError("CreateFile");return 1;}char szTemp[MAX_PATH] = { 0 };BOOL bRet = FALSE;DWORD dwRet = 0;DWORD dwBufferSize = 2048;// 申請一個足夠大的緩沖區 BYTE *pBuf = new BYTE[dwBufferSize];if (NULL == pBuf){ShowError("new");return 2;}FILE_NOTIFY_INFORMATION *pFileNotifyInfo = (FILE_NOTIFY_INFORMATION *)pBuf;// 開始循環設置監控do{::RtlZeroMemory(pFileNotifyInfo, dwBufferSize);// 設置監控目錄bRet = ::ReadDirectoryChangesW(hDirectory,pFileNotifyInfo,dwBufferSize,TRUE,FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件屬性FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次寫入&dwRet,NULL,NULL);if (FALSE == bRet){ShowError("ReadDirectoryChangesW");break;}// 將寬字符轉換成窄字符W2C((wchar_t *)(&pFileNotifyInfo->FileName), pFileNotifyInfo->FileNameLength, szTemp, MAX_PATH);// 判斷操作類型并顯示switch (pFileNotifyInfo->Action){case FILE_ACTION_REMOVED:printf("[File Removed Action] %s\n", szTemp);break;case FILE_ACTION_ADDED:{// 新增文件printf("[File Added Action] %s\n", szTemp);break;}case FILE_ACTION_MODIFIED:printf("[File Modified Action] %s\n", szTemp);break;case FILE_ACTION_RENAMED_OLD_NAME:printf("[File Rename Action] %s\n", szTemp);break;case FILE_ACTION_RENAMED_NEW_NAME:printf("[File Rename Action] %s\n", szTemp);break;default:{break;}}} while (bRet);// 關閉句柄, 釋放內存::CloseHandle(hDirectory);delete[] pBuf;pBuf = NULL;return 0;
}
總結
以上是生活随笔為你收集整理的ReadDirectoryChangesW监控目录文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crypto++使用DES加密(ECB
- 下一篇: C++实现类不可复制