我需要原始C ++ / WinAPI中的.Net的FileSystemWatcher模拟。 我几乎开始使用FindFirstChangeNotification / FindNextChangeNotification来编写一个代码,但后来我发现我可能不是第一个需要这个并且可能有人愿意分享的人。
理想情况下,我需要的是一个可以按如下方式使用的类:
FileWatcher fw;
fw.startWatching("C:\MYDIR", "filename.dat",
FileWatcher::SIZE | FileWatcher::LAST_WRITE,
&myChangeHandler);
...
fw.stopWatching();
或者如果它会像boost :: signal那样使用它会更好。 但是,除了标准库,提升和原始WinAPI之外,没有其他依赖项。 谢谢!
答案 0 :(得分:6)
ReadDirectoryChangesW函数怎么样?
http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx
它将通知存储在缓冲区中,因此您不会错过任何更改(除非缓冲区溢出)
答案 1 :(得分:4)
有一些公共域代码here。我当前的项目使用了这个(继承自以前的开发人员)。它工作得很好,但我们确实错过了通知,原因不明(可能不是由此代码引起)。
请注意,此处的Win32 API存在一些限制,这使得很难/不可能避免丢失通知。 API的背景和涉嫌工作是here
答案 2 :(得分:2)
这是一个跨平台的解决方案,但很好地完成了包装Win32的工作: https://code.google.com/p/simplefilewatcher/
答案 3 :(得分:1)
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created%28v=vs.71%29.aspx以上是throgh C#,我们总能写一个COM Wrapper