1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <stdio.h>
  4.  
  5. #include <assert.h>
  6.  
  7. char* WideCharToMultiByte(LPCTSTR widestr)
  8. {
  9. int num = WideCharToMultiByte(CP_OEMCP,NULL,widestr,-,NULL,,NULL,FALSE);
  10. char *pchar = new char[num];
  11. WideCharToMultiByte (CP_OEMCP,NULL,widestr,-,pchar,num,NULL,FALSE);
  12. return pchar;
  13. }
  14.  
  15. bool IsDirectory(const LPTSTR & strPath)
  16. {
  17. DWORD dwAttrib = GetFileAttributes( strPath );
  18. return static_cast<bool>( ( dwAttrib != 0xffffffff
  19. && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) );
  20. }
  21.  
  22. int main()
  23. {
  24. HANDLE hDir;
  25. BYTE* pBuffer = (LPBYTE)new CHAR[];
  26. DWORD dwBufferSize;
  27. LPTSTR lpPath = _T("D:\\同步目录\\");
  28. WCHAR szFileName[MAX_PATH];
  29. char* szFilePath;
  30.  
  31. PFILE_NOTIFY_INFORMATION pNotify = (PFILE_NOTIFY_INFORMATION)pBuffer;
  32.  
  33. hDir = CreateFile( lpPath, FILE_LIST_DIRECTORY,
  34. FILE_SHARE_READ |
  35. FILE_SHARE_WRITE |
  36. FILE_SHARE_DELETE, NULL,
  37. OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS |
  38. FILE_FLAG_OVERLAPPED, NULL);
  39. if (hDir == INVALID_HANDLE_VALUE)
  40. {
  41. printf("INVALID_HANDLE_VALUE");
  42. return ;
  43. }
  44.  
  45. while (TRUE)
  46. {
  47. if(ReadDirectoryChangesW(hDir,
  48. pBuffer,
  49. ,
  50. TRUE,
  51. FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE,
  52. &dwBufferSize,
  53. NULL,
  54. NULL))
  55. {
  56. memset(szFileName, , MAX_PATH);
  57. memcpy(szFileName, lpPath, _tcslen(lpPath) * sizeof(WCHAR));
  58. memcpy(szFileName + _tcslen(lpPath), pNotify->FileName, pNotify->FileNameLength);
  59. szFilePath = WideCharToMultiByte(szFileName);
  60.  
  61. switch(pNotify->Action)
  62. {
  63. case FILE_ACTION_ADDED:
  64. if (IsDirectory(szFileName))
  65. {
  66. printf("Directory %s added.\n", szFilePath);
  67. }
  68. else
  69. {
  70. printf("File %s added.\n", szFilePath);
  71. }
  72. break;
  73. case FILE_ACTION_REMOVED:
  74. if (IsDirectory(szFileName))
  75. {
  76. printf("Directory %s removed.\n", szFilePath);
  77. }
  78. else
  79. {
  80. printf("File %s removed.\n", szFilePath);
  81. }
  82. break;
  83. case FILE_ACTION_MODIFIED:
  84. if (!IsDirectory(szFileName))
  85. {
  86. printf("File %s modified.\n", szFilePath);
  87. }
  88. break;
  89. case FILE_ACTION_RENAMED_OLD_NAME:
  90. if (pNotify && pNotify->NextEntryOffset != 0UL)
  91. {
  92. PFILE_NOTIFY_INFORMATION pNext = (PFILE_NOTIFY_INFORMATION) ((LPBYTE)pNotify + pNotify->NextEntryOffset);
  93. assert((DWORD)((BYTE*)pNext - pBuffer) < dwBufferSize);
  94. {
  95. WCHAR szFileName2[MAX_PATH];
  96. char* szFilePath2;
  97. memset(szFileName2, , MAX_PATH);
  98. memcpy(szFileName2, lpPath, _tcslen(lpPath) * sizeof(WCHAR));
  99. memcpy(szFileName2 + _tcslen(lpPath), pNext->FileName, pNext->FileNameLength);
  100. szFilePath2 = WideCharToMultiByte(szFileName2);
  101. if (IsDirectory(szFileName2))
  102. {
  103. printf("Directory name changed from %s to %s.\n", szFilePath, szFilePath2);
  104. }
  105. else
  106. {
  107. printf("File name changed from %s to %s.\n", szFilePath, szFilePath2);
  108. }
  109. }
  110. }
  111. break;
  112. case FILE_ACTION_RENAMED_NEW_NAME:
  113. printf("FILE_ACTION_RENAMED_NEW_NAME.\n");
  114. break;
  115. default:
  116. break;
  117. }
  118. }
  119. }
  120. }
  1. 关于ReadDirectoryChangesW的详细介绍可以查看
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v=vs.85).aspx

VC++文件监控 ReadDirectoryChangesW的更多相关文章

  1. 在C#使用文件监控对象FileSystemWatcher的几种方案

    最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给web服务 ...

  2. 使用文件监控对象FileSystemWatcher实现数据同步

    最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务 ...

  3. C#使用文件监控对象FileSystemWatcher 实现数据同步

    在C#使用文件监控对象FileSystemWatcher 实现数据同步 2013-12-12 18:24 by 幕三少, 352 阅读, 3 评论, 收藏, 编辑 最近在项目中有这么个需求,就是得去实 ...

  4. C#使用FileSystemWatcher控件实现的文件监控功能示例

    本文实例讲述了C#使用FileSystemWatcher控件实现的文件监控功能.分享给大家供大家参考,具体如下: FileSystemWatcher 可以使用FileSystemWatcher组件监视 ...

  5. java实现文件监控

    文件监控器: package testfile; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import ...

  6. Nodejs文件监控chokidar

    最近有个需求是扫描用例,用例是放在svn上,如果每次扫描都去遍历目录的话会有占用太多的io,所以想着用文件监控,有文件变化时只对该文件进行操作. Nodejs里的 chokidar 模块可以更好的对文 ...

  7. Linux下日志文件监控系统Logwatch的使用记录

    Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...

  8. 超实用文件监控多线程FTP上传工具

    这是自己很久以前写的一个多线程FTP 上传工具,支持多账户,自定义线程数,自定义文件监控目录,可用做文件发布使用,非常实用,今天有小伙伴问起,现分享出来: using System; using Sy ...

  9. VC文件操作

    VC文件操作 重命名文件: 注意: 该操作对文件夹一样有效! CFileFind Finder; CString sOldPath = _T("D:\\tt.txt"); CStr ...

随机推荐

  1. Ubuntu 16.04安装Sublime Text3

    1.安装: sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo apt-get instal ...

  2. hdu 5950 Recursive sequence

    题意:告诉你数列的递推公式为f(n+1)=f(n)+2*f(n-1)+(n+1)^4 以及前两项a,b:问第n项为多少,结果对2147493647取模. 题解:有递推公式,马上应该就能想到矩阵快速幂: ...

  3. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  4. jedis 2.7.2 jar

    jedis 2.7.2 已经公布. 源码https://github.com/xetorthio/jedis/releases/tag/jedis-2.7.2 jar 下载地址  http://dow ...

  5. Objective-C NSFileManager 文件管理总结

    createFileAtPath //创建文件 NSFileManager *fm = [NSFileManager defaultManager]; NSString *strpath = [NSS ...

  6. ios17--自定义控件2改进

    控制器: // // XMGViewController.h #import <UIKit/UIKit.h> @interface XMGViewController : UIViewCo ...

  7. 深入理解7816(3)-----关于T=0 【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcyp.html 深入理解7816(3)-----关于T=0 卡片和终端之间的数据传输是通过命令响应 ...

  8. git subtree 拆分split repository

    subtree出现,是为了取代submodule http://wenku.baidu.com/link?url=ola85Z5tIXJpxCjLTk-dcO81ayXLs68_y6dsmXIa0ni ...

  9. ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性!

    ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性! curl -XPOST "http://localhos ...

  10. POJ3090 Visible Lattice Points 欧拉函数

    欧拉函数裸题,直接欧拉函数值乘二加一就行了.具体证明略,反正很简单. 题干: Description A lattice point (x, y) in the first quadrant (x a ...