У кого-нибудь есть класс, подобный FileSystemWatcher, в С++/WinAPI?

Мне нужен аналог .Net FileSystemWatcher в сыром С++/WinAPI. Я почти начал кодировать один сам, используя FindFirstChangeNotification/FindNextChangeNotification, но потом мне пришло в голову, что я, вероятно, не первый, кому это нужно, и, возможно, кто-то захочет поделиться.

В идеале мне нужен класс, который можно использовать следующим образом:

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

Или, если он будет использовать somehting, например boost:: signal, это будет еще лучше. Но, пожалуйста, никаких зависимостей, отличных от стандартной библиотеки, повышения и необработанного WinAPI. Спасибо!

Ответ 1

Как насчет функции ReadDirectoryChangesW?

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

Он хранит уведомления в буфере, поэтому вы не пропускаете никаких изменений (если только переполнение буфера)

Ответ 2

Существует код общедоступного домена здесь. Мой текущий проект использует это (унаследовал от предыдущих разработчиков). Он работает очень хорошо, но мы пропускаем уведомления по причинам, которые неясны (и, возможно, не вызваны этим кодом).

Обратите внимание, что в Win32 API есть некоторые ограничения, из-за которых сложно/невозможно избежать отсутствия уведомлений. Предпосылки и предполагаемый рабочий раунд для API: здесь