![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Borr |
|
|||
|
Unregistered |
Не сталкивался ли кто с такой задачей: под Вин200/XP необходимо в фоновом режиме мониторить измнения файлов в определенных каталогах. Файлы могут быть как локальными, так и находящимися на сетевом диске (новелловский сервер).
Я попытался использовать такой подход (пример для случая, когда монитортся только однин каталог): 1. Сначала получаю хэндл каталога, который мониторится, таким образом: hDir = CreateFile( <имя_каталога>, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL) 2. Затем создаю порт hCompPort=CreateIoCompletionPort(hDir, hCompPort, hDir, 0); 3. Запускаю CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) HandleDirectoryChange, hCompPort, 0, &tid); 4. И в этом thread-e (в HandleDirectoryChange) сначал жду события (изменение каталога) через GetQueuedCompletionStatus(hCompPort, &numBytes, DirInfo, &lpOverlapped, 1000) а затем, если событие произошло, анализирую его через DirInfo.lpBuffer и читаю что еще изменилось в каталоге через ReadDirectoryChangesW(hDir, lpBuffer, MAX_BUFFER, TRUE, FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME, &dwBufLength, &Overlapped, NULL); В результате с локальными файлами все работает как надо. Но в сети (новелл) изменения каталога не мониторятся. Кто-то знает, какой подход использовать для мониторинга изменений файлов на новелловском сервере? Где у меня грабли? Реализуемо ли это вообще через АПИ-шные средства или нужна какая-то (какая?) библиотека? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Как и на любом сервере. Сервер не будет сообщать клиенту об изменениях в каталоге. Очевидно. Придется либо его уговорить - для чего на сервере должен работать детект-модуль, сообщающий об изменениях или скажем протоколирующий их. Или успокоиться на периодическом опросе контента каталога и сравнения его с предыдущим значением (LastAccessed, LastChanged). Для простого написАния консольного приложения-детектора на Нетваревом сервере есть NSN, Perl, Java. Впрочем можно и NLM накропать... Для общения с Нетваревым сервером можно использовать сокеты, предоставляемый Нетваревым клиентом API, ODBC4NDS и кучу прочей дряни. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |