Может ли операционная система сообщить мне, когда будет создан новый файл?
-
03-07-2019 - |
Вопрос
Я хочу знать, когда создается новый файл в определенном каталоге, вместо того, чтобы время от времени сканировать каталог.
Я понимаю, что есть способ заставить операционную систему сообщить моей программе, что был создан новый файл.Как это работает?
Как уже отмечалось, это имеет сходство с Как получать уведомления об изменении файла / каталога на C / C ++, в идеале используя POSIX
Решение
Зависит от того, какая операционная система.
В Windows базовым API будет Уведомления об изменениях в каталоге.
Поскольку вы упоминаете Linux в тегах, это было бы интерфейс inotify API.
Чтобы добавить к ответу OS X, начиная с версии 10.5, вы хотите FSEvents API-интерфейс.
Другие советы
В Linux проверьте Инициализировать.
Как получать уведомления об изменении файла / каталога на C / C ++, в идеале используя POSIX
или поищите inotify в stackoverflow, и вы получите множество идей
СЕМЬЯ обеспечивает согласованный интерфейс просмотра файлов во всех UNIX-версиях.В Linux внутренний демон может быть заменен Геймин, но программа, связанная с FAM, будет работать с Gamin просто отлично.(За кулисами FAM может использовать опрос, а Gamin может использовать inotify, dnotify или kqueue, но вам не нужно беспокоиться о реализации.)
OS X.5 имеет События, который сильно отличается тем, что он отслеживает всю систему, а не указанные файлы и каталоги, но также удовлетворит ваши потребности.
В Windows смотрите Найти (Первый| Следующий|Закрыть)ChangeNotification или ReadDirectoryChanges.
FileSystemWatcher - это ответ, и он работает рекурсивно.
Вот такой пример здесь (найдите FileSystemWatcher)
В Mac OS X эта функциональность является частью Spotlight API.
Использование .Net в Windows (не уверен насчет Linux / mono) вы можете использовать FileSsytemWatcher для отслеживания новых файлов и инициирования событий при их создании.
Из MSDN:
Используйте FileSystemWatcher для отслеживания изменений в указанном каталоге.Вы можете следить за изменениями в файлах и подкаталогах указанного каталога.Вы можете создать компонент для просмотра файлов на локальном компьютере, сетевом диске или удаленном компьютере.
Windows API предоставляет средства для мониторинга файловой системы - здесь есть пример http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx