Ответ 1
Как насчет функции ReadDirectoryChangesW?
http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx
Он хранит уведомления в буфере, поэтому вы не пропускаете никаких изменений (если только переполнение буфера)
Мне нужен аналог .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. Спасибо!
Как насчет функции ReadDirectoryChangesW?
http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx
Он хранит уведомления в буфере, поэтому вы не пропускаете никаких изменений (если только переполнение буфера)
Существует код общедоступного домена здесь. Мой текущий проект использует это (унаследовал от предыдущих разработчиков). Он работает очень хорошо, но мы пропускаем уведомления по причинам, которые неясны (и, возможно, не вызваны этим кодом).
Обратите внимание, что в Win32 API есть некоторые ограничения, из-за которых сложно/невозможно избежать отсутствия уведомлений. Предпосылки и предполагаемый рабочий раунд для API: здесь
Это кросс-платформенное решение, но дело в том, что дело обертывает материал Win32: https://code.google.com/p/simplefilewatcher/
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created%28v=vs.71%29.aspx выше, чем в С#, мы всегда можем написать COM Wrapper