У кого-нибудь есть FileSystemWatcher-подобный класс в C ++ / WinAPI? - PullRequest
11 голосов
/ 21 января 2010

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 22 января 2010

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

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

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

4 голосов
/ 21 января 2010

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

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

2 голосов
/ 17 сентября 2013

Это кроссплатформенное решение, но оно прекрасно справляется с задачей Win32: https://code.google.com/p/simplefilewatcher/

1 голос
/ 30 декабря 2011

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created%28v=vs.71%29.aspx вышеизложенное делает C #, мы всегда можем написать COM Wrapper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...