我需要一个.Net的FileSystemWatcher模拟的原始C++/WinAPI。我几乎开始自己使用FindFirstChangeNotification/FindNextChangeNotification,编写代码,但后来我突然想到,我可能不是第一个需要它的人,也许会有人愿意分享。
理想情况下,我需要的是一个可以按如下方式使用的类:
FileWatcher fw;
fw.startWatching("C:\MYDIR", "filename.dat",
FileWatcher::SIZE | FileWatcher::LAST_WRITE,
&myChangeHandler);
...
fw.stopWatching();或者如果它使用像boost::signal这样的东西,那就更好了。但是,请不要依赖标准库、boost和原始WinAPI。谢谢!
发布于 2010-01-22 06:05:39
那么ReadDirectoryChangesW函数呢?
http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx
它将通知存储在缓冲区中,这样您就不会错过任何更改(除非缓冲区溢出)
发布于 2010-01-22 03:56:26
有一些公共领域的代码here。我当前的项目使用这个(继承自以前的开发人员)。它工作得很好,但我们确实因为不清楚的原因(可能不是由这段代码引起的)而错过了通知。
请注意,这里的Win32应用程序接口有一些限制,这使得很难/不可能避免遗漏通知。有关空气污染指数的背景资料及据称的工作详情为here。
发布于 2013-09-17 16:47:53
2021答案:
下面列出的repo的派生版本是主动维护的:https://github.com/SpartanJ/efsw
老生常谈:
这是一个跨平台的解决方案,但是很好地完成了包装Win32的工作:https://github.com/jameswynn/simplefilewatcher
https://stackoverflow.com/questions/2107275
复制相似问题