有人在C++/WinAPI中有类似FileSystemWatcher的类吗?

Ale*_*ter 11 c++ winapi filesystemwatcher

我需要原始C++/WinAPI中的.Net的FileSystemWatcher模拟.我几乎开始使用FindFirstChangeNotification/FindNextChangeNotification来编写一个代码,但后来我发现我可能不是第一个需要这个并且可能有人愿意分享的人.

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

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

或者,如果它会使用像boost :: signal这样的东西,它会更好.但是,除了标准库,提升和原始WinAPI之外,没有其他依赖项.谢谢!

Dyn*_*ite 6

那ReadDirectoryChangesW函数怎么样?

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

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

  • 对不起我错了。它允许等待事件。似乎是一个可行的选择。 (2认同)

Ste*_*end 5

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

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


tom*_*tom 5

2021 答案:

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

旧答案:

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