12

我需要原始 C++/WinAPI 中的 .Net 的 FileSystemWatcher 模拟。我几乎开始使用 FindFirstChangeNotification/FindNextChangeNotification 自己编写一个代码,但后来我突然想到我可能不是第一个需要这个的人,也许有人会愿意分享。

理想情况下,我需要一个可以按如下方式使用的类:

FileWatcher fw;
fw.startWatching("C:\MYDIR", "filename.dat", 
     FileWatcher::SIZE | FileWatcher::LAST_WRITE,
     &myChangeHandler);
...
fw.stopWatching();

或者,如果它使用 boost::signal 之类的东西,那就更好了。但请不要依赖标准库、boost 和原始 WinAPI 之外的其他依赖项。谢谢!

4

4 回答 4

7

ReadDirectoryChangesW 函数呢?

http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx

它将通知存储在缓冲区中,因此您不会错过任何更改(除非缓冲区溢出)

于 2010-01-21T22:05:38.767 回答
5

这里有一些公共领域的代码。我当前的项目使用这个(继承自以前的开发人员)。它工作得很好,但我们确实会因为不清楚的原因错过通知(并且可能不是由这段代码引起的)。

请注意,此处的 Win32 API 有一些限制,这使得避免丢失通知变得困难/不可能。API的背景和所谓的工作回合在这里

于 2010-01-21T19:56:25.907 回答
5

2021年答案:

下面列出的 repo 的分叉版本得到了积极维护:https ://github.com/SpartanJ/efsw

老答案:

这是一个跨平台的解决方案,但是很好地包装了 Win32 的东西: https ://github.com/jameswynn/simplefilewatcher

于 2013-09-17T08:47:53.023 回答
1

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created%28v=vs.71%29.aspx上面是通过 C#,我们总是可以写一个 COM Wrapper

于 2011-12-30T06:52:01.137 回答