| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Отловить появление файла.. |
| Автор: -Sman- 29.3.2004, 11:37 |
| Здравствуйте! Вот такая вот задачка есть - на машину сбрасывается файл (по сети или ftp), необходимо написать программку которая висела бы и отлавливала появление этого файла в конкретной папке.. Подскажите пожалуйста, что делать? В какую сторону рыть-то? Есть мнение - что смотреть надо в сторону хуков..Вот еще хотелось бы узнать как с ними работать в этом направлении Пасиб заранее.. |
| Автор: Abrek 29.3.2004, 16:00 |
| Если директория фиксирована, то можно сделать таимер и на его события опрашивать FileExists |
| Автор: Mephisto 29.3.2004, 17:47 | ||
Если оперативу не жалко! |
| Автор: mr.DUDA 29.3.2004, 21:29 |
| апи-хук поставить на WinAPI'шный CreateFile, его все юзают... |
| Автор: Royan 30.3.2004, 13:40 |
| Если твоя машина стоит на винде (>2000) можно воспользоваться аудитом, пойди на msdn, и набери в поиске что-то вроде About Authorization, Access Control, Audit Generation. Наверняка вывалится то что нужно. |
| Автор: p0s0l 30.3.2004, 15:53 |
| -Sman-, делал я такую вещь, правда на Delphi. В Cи не особо, так что извиняй, если что не так напишу... Принцип простой (но надо 2k/XP...): 1. Открываешь директорию для просмотра: hDir = CreateFile("C:\\1", FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); 2. Создаешь событие для прослеживания изменений директории: hNotify = FindFirstChangeNotification("c:\\1", FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); 3. Цикл отслеживания: 3.1 Ожидаешь событие изменения: WaitForSingleObject(hNotify, INFINITE); 3.2 Получаешь список изменений в директории: ReadDirectoryChangesW(hDir, Buf, BufSize, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME, &Returned, NULL, NULL); 3.3 В Buf теперь список структур FILE_NOTIFY_INFORMATION, их просматриваешь, и если поле Action == FILE_ACTION_ADDED, то добавили файл, его имя в поле FileName. 3.4 Ожидаешь следующее изменение: FindNextChangeNotification(hNotify); -> 3.1 4. FindCloseChangeNotification(hNotify); 5. CloseHandle(hDir); PS: Можно обойтись и без FindFirstChangeNotification/FindNextChangeNotification, просто время от времения делая ReadDirectoryChangesW, но это будет менее экономично в смысле процессорного времени... |
| Автор: p0s0l 31.3.2004, 06:26 |
| Не слушай меня Я как всегда всё усложнил |