c语言写文件监控,vc++监控指定路径下文件变化实现代码

c语言写文件监控,vc++监控指定路径下文件变化实现代码

2023年6月22日发(作者:)

c语⾔写⽂件监控,vc++监控指定路径下⽂件变化实现代码参考MSDN⽂档具体看代码# include < iostream ># include < windows.h ># include < process.h ># include < tchar.h ># include < string >using namespace std;typedef void( * CHANGESCALLBACK)(const std::wstring strFileName);/*@ 监控指定⽬录下⽂件变化@ strDirPath 需要监控的⽬录@ dwChangesType 需要监控⽂件变化⽅式@ onCallBack 变化后的回调处理函数*/void CheckFilesChanges(const std::wstring strDirPath, DWORD dwChangesType, CHANGESCALLBACK onCallBack);void PrintMsg(const std::wstring strFileName) {wprintf_s(L "new add File:t %srn", strFileName.c_str());}void CheckFilesChanges(const std::wstring strDirPath, DWORD dwChangesType, CHANGESCALLBACK onCallBack) {if (() || !onCallBack)return;HANDLE hDir = INVALID_HANDLE_VALUE;BYTE lpBuffer[1024];ZeroMemory(lpBuffer, 1024);DWORD cbBytes = NULL;BOOL isOk = FALSE;FILE_NOTIFY_INFORMATION * pnotify = (FILE_NOTIFY_INFORMATION * )lpBuffer;FILE_NOTIFY_INFORMATION * tmp;ZeroMemory( & lpBuffer, sizeof(FILE_NOTIFY_INFORMATION));hDir = CreateFile(strDirPath.c_str(), FILE_LIST_DIRECTORY,FILE_SHARE_READ |FILE_SHARE_WRITE |FILE_SHARE_DELETE, NULL,OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS |FILE_FLAG_OVERLAPPED, NULL);if (INVALID_HANDLE_VALUE == hDir)return;while (true) {isOk = ReadDirectoryChangesW(hDir, & lpBuffer,sizeof(lpBuffer),TRUE,FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE,& cbBytes,NULL,NULL);if (isOk) {tmp = pnotify;PWSTR fileName = nullptr;std::wstring strFileName;if (tmp->FileNameLength) {DWORD dwLength = tmp->FileNameLength + 1;fileName = new wchar_t[dwLength];if (fileName) {memset(fileName, 0, dwLength * 2);memcpy(fileName, tmp->FileName, dwLength * 2);strFileName = fileName;}if (fileName)delete []fileName;}if (tmp->Action == dwChangesType) {onCallBack(strFileName);}ZeroMemory(tmp, 1024);/*switch (tmp->Action){case FILE_ACTION_ADDED: //当前⽬录新增⽂件{onCallBack(strFileName);}break;case FILE_ACTION_REMOVED: //该⽂件已从⽬录中删除{onCallBack(strFileName);}break;case FILE_ACTION_MODIFIED: //该⽂件已被修改。也可以是时间戳或属性的更改{onCallBack(strFileName);}break;case FILE_ACTION_RENAMED_OLD_NAME: //该⽂件已重命名,这是旧名称。{onCallBack(strFileName);}break;case FILE_ACTION_RENAMED_NEW_NAME: //该⽂件已重命名,这是新名称。{onCallBack(strFileName);}break;default:break;}*/}}CloseHandle(hDir);}unsigned int CALLBACK ThreadProc(void * arg) {CheckFilesChanges(_T("E:GoCode"), FILE_ACTION_ADDED, PrintMsg);return 0;}int main(int argc, char * argv[]) {HANDLE hThread = NULL;hThread = (HANDLE)::_beginthreadex(nullptr, NULL, ThreadProc, NULL, NULL, NULL);system("pause");return 0;}好了这篇⽂章就介绍到这了,需要的朋友可以参考⼀下。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687428005a9280.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信