VC++文件监控 ReadDirectoryChangesW
- #include <windows.h>
- #include <tchar.h>
- #include <stdio.h>
- #include <assert.h>
- char* WideCharToMultiByte(LPCTSTR widestr)
- {
- int num = WideCharToMultiByte(CP_OEMCP,NULL,widestr,-,NULL,,NULL,FALSE);
- char *pchar = new char[num];
- WideCharToMultiByte (CP_OEMCP,NULL,widestr,-,pchar,num,NULL,FALSE);
- return pchar;
- }
- bool IsDirectory(const LPTSTR & strPath)
- {
- DWORD dwAttrib = GetFileAttributes( strPath );
- return static_cast<bool>( ( dwAttrib != 0xffffffff
- && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) );
- }
- int main()
- {
- HANDLE hDir;
- BYTE* pBuffer = (LPBYTE)new CHAR[];
- DWORD dwBufferSize;
- LPTSTR lpPath = _T("D:\\同步目录\\");
- WCHAR szFileName[MAX_PATH];
- char* szFilePath;
- PFILE_NOTIFY_INFORMATION pNotify = (PFILE_NOTIFY_INFORMATION)pBuffer;
- hDir = CreateFile( lpPath, 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)
- {
- printf("INVALID_HANDLE_VALUE");
- return ;
- }
- while (TRUE)
- {
- if(ReadDirectoryChangesW(hDir,
- pBuffer,
- ,
- TRUE,
- FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE,
- &dwBufferSize,
- NULL,
- NULL))
- {
- memset(szFileName, , MAX_PATH);
- memcpy(szFileName, lpPath, _tcslen(lpPath) * sizeof(WCHAR));
- memcpy(szFileName + _tcslen(lpPath), pNotify->FileName, pNotify->FileNameLength);
- szFilePath = WideCharToMultiByte(szFileName);
- switch(pNotify->Action)
- {
- case FILE_ACTION_ADDED:
- if (IsDirectory(szFileName))
- {
- printf("Directory %s added.\n", szFilePath);
- }
- else
- {
- printf("File %s added.\n", szFilePath);
- }
- break;
- case FILE_ACTION_REMOVED:
- if (IsDirectory(szFileName))
- {
- printf("Directory %s removed.\n", szFilePath);
- }
- else
- {
- printf("File %s removed.\n", szFilePath);
- }
- break;
- case FILE_ACTION_MODIFIED:
- if (!IsDirectory(szFileName))
- {
- printf("File %s modified.\n", szFilePath);
- }
- break;
- case FILE_ACTION_RENAMED_OLD_NAME:
- if (pNotify && pNotify->NextEntryOffset != 0UL)
- {
- PFILE_NOTIFY_INFORMATION pNext = (PFILE_NOTIFY_INFORMATION) ((LPBYTE)pNotify + pNotify->NextEntryOffset);
- assert((DWORD)((BYTE*)pNext - pBuffer) < dwBufferSize);
- {
- WCHAR szFileName2[MAX_PATH];
- char* szFilePath2;
- memset(szFileName2, , MAX_PATH);
- memcpy(szFileName2, lpPath, _tcslen(lpPath) * sizeof(WCHAR));
- memcpy(szFileName2 + _tcslen(lpPath), pNext->FileName, pNext->FileNameLength);
- szFilePath2 = WideCharToMultiByte(szFileName2);
- if (IsDirectory(szFileName2))
- {
- printf("Directory name changed from %s to %s.\n", szFilePath, szFilePath2);
- }
- else
- {
- printf("File name changed from %s to %s.\n", szFilePath, szFilePath2);
- }
- }
- }
- break;
- case FILE_ACTION_RENAMED_NEW_NAME:
- printf("FILE_ACTION_RENAMED_NEW_NAME.\n");
- break;
- default:
- break;
- }
- }
- }
- }
- 关于ReadDirectoryChangesW的详细介绍可以查看
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v=vs.85).aspx
VC++文件监控 ReadDirectoryChangesW的更多相关文章
- 在C#使用文件监控对象FileSystemWatcher的几种方案
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给web服务 ...
- 使用文件监控对象FileSystemWatcher实现数据同步
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务 ...
- C#使用文件监控对象FileSystemWatcher 实现数据同步
在C#使用文件监控对象FileSystemWatcher 实现数据同步 2013-12-12 18:24 by 幕三少, 352 阅读, 3 评论, 收藏, 编辑 最近在项目中有这么个需求,就是得去实 ...
- C#使用FileSystemWatcher控件实现的文件监控功能示例
本文实例讲述了C#使用FileSystemWatcher控件实现的文件监控功能.分享给大家供大家参考,具体如下: FileSystemWatcher 可以使用FileSystemWatcher组件监视 ...
- java实现文件监控
文件监控器: package testfile; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import ...
- Nodejs文件监控chokidar
最近有个需求是扫描用例,用例是放在svn上,如果每次扫描都去遍历目录的话会有占用太多的io,所以想着用文件监控,有文件变化时只对该文件进行操作. Nodejs里的 chokidar 模块可以更好的对文 ...
- Linux下日志文件监控系统Logwatch的使用记录
Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...
- 超实用文件监控多线程FTP上传工具
这是自己很久以前写的一个多线程FTP 上传工具,支持多账户,自定义线程数,自定义文件监控目录,可用做文件发布使用,非常实用,今天有小伙伴问起,现分享出来: using System; using Sy ...
- VC文件操作
VC文件操作 重命名文件: 注意: 该操作对文件夹一样有效! CFileFind Finder; CString sOldPath = _T("D:\\tt.txt"); CStr ...
随机推荐
- Ubuntu 16.04安装Sublime Text3
1.安装: sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo apt-get instal ...
- hdu 5950 Recursive sequence
题意:告诉你数列的递推公式为f(n+1)=f(n)+2*f(n-1)+(n+1)^4 以及前两项a,b:问第n项为多少,结果对2147493647取模. 题解:有递推公式,马上应该就能想到矩阵快速幂: ...
- BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js
BAT 前端开发面经 —— 吐血总结 目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...
- jedis 2.7.2 jar
jedis 2.7.2 已经公布. 源码https://github.com/xetorthio/jedis/releases/tag/jedis-2.7.2 jar 下载地址 http://dow ...
- Objective-C NSFileManager 文件管理总结
createFileAtPath //创建文件 NSFileManager *fm = [NSFileManager defaultManager]; NSString *strpath = [NSS ...
- ios17--自定义控件2改进
控制器: // // XMGViewController.h #import <UIKit/UIKit.h> @interface XMGViewController : UIViewCo ...
- 深入理解7816(3)-----关于T=0 【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcyp.html 深入理解7816(3)-----关于T=0 卡片和终端之间的数据传输是通过命令响应 ...
- git subtree 拆分split repository
subtree出现,是为了取代submodule http://wenku.baidu.com/link?url=ola85Z5tIXJpxCjLTk-dcO81ayXLs68_y6dsmXIa0ni ...
- ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性!
ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性! curl -XPOST "http://localhos ...
- POJ3090 Visible Lattice Points 欧拉函数
欧拉函数裸题,直接欧拉函数值乘二加一就行了.具体证明略,反正很简单. 题干: Description A lattice point (x, y) in the first quadrant (x a ...