1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
|
|
1 | |
Наблюдение за папкой, используя inotify25.03.2013, 17:02. Показов 3092. Ответов 11
Метки нет (Все метки)
Здравствуйте! Существует общая папка большой сети, к которой каждый пользователь компьютера сети имеет доступ как и чтения так и записи. Я делаю программу в QT Creator на языке C++ для ОСи - Ubuntu, используя Inotify(т.к C++, то в моём случае - inotify-cxx), которая должна наблюдать за изменениями папки(создание файла, переименование, удаление...).
Переименование в Unix системах проходит двумя событиями - IN_MOVED_FROM и IN_MOVED_TO. Мне программа это впринципе и выдаёт, что верно! Но хотелось бы, чтобы вместо двух этих событий было одно - IN_RENAMED В Inotify для этого якобы существуют "cookies", даже пишут что только для события Переименования эти Куки и нужны, но НИГДЕ я не нашёл примера использования этих куков... Поэтому я здесь...нуждаюсь в помощи в решении этого вопроса. P.S. В Windows это делается в 1000 раз проще
0
|
25.03.2013, 17:02 | |
Ответы с готовыми решениями:
11
Как отслеживать и соответственно вовремя изменить картинку с закрытой папкой на картинку с открытой папкой? Не могу разобраться с папкой Desktop и скрытой папкой Public Desktop Работа с inotify Наблюдение |
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
26.03.2013, 03:36 | 3 |
А причем тогда библиотека Qt, если вопрос исключительно по Inotify?
Если бы делал программу в какой-нибудь IDE типа Anjuta, то вопрос бы задавал в форуме по GTK? Такая что ли логика? Добавлено через 7 минут Наверное, имелся ввиду класс QFileSystemWatcher, у которого такой статус:
1
|
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
|
|
26.03.2013, 23:56 [ТС] | 4 |
Я просто хотел, чтобы человек, читающий мою проблему знал как можно больше информации во избежании недопониманий. Неужели обязательно было писать своё мнение о моём способе создания содержания темы...
Спасибо за ответ. Странно что раньше я не натыкался на этот класс... Сейчас же буду реализовывать этот способ наблюдения за папкой. Но! Также я надеюсь, что кто-нибудь опишет, как же использовать cookies в Inotify. Добавлено через 4 часа 25 минут Да, QFileSystemWatcher содержит в себе Inotify. Я уже опробовал QFileSystemWatcher в действии, очень удобный класс. Но, к сожалению, я не нашёл способа обрабатывать события. Мне нужно сортировать события. Для визуального представления: Человек локальной сети создаёт файл в папке, за которой следит программа. Программа должна выдать следующее: ["время": CREATED "путь и имя файла"] Аналогично при Переименовании, Удалении...
0
|
27.03.2013, 09:25 | 5 |
Он выдает сигнал, что прошли изменения, и ничего более.
Что бы узнать что и как изменилось, надо задействовать QFileInfo и его методы: lastModified(), lastRead() и т.п. Т.е. алгоритм примерно такой будет: QFileSystemWatcher выдает сигнал об изменении файла, на этот файл напускаем QFileInfo и выдаем дату изменения. Если добавлен/удален файл, тогда QFileSystemWatcher выдаст сигнал об изменении папки, сравниваем с предыдущим состоянием (состояние надо будет хранить) и выводим изменения.
1
|
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
|
|
27.03.2013, 14:00 [ТС] | 6 |
oxotnik, Спасибо за ответ. Сейчас же буду пробовать вами предложенный класс с его методами.
P.S. Я более чем уверен, что QFileSystemWatcher содержит в себе Inotify(или основан на Inotify), который умеет сортировать события. Просто класс ущемил, подавил некоторые возможности... Очень очень сильные программисты смогут получить события от QFileSystemWatcher... Но это не суть важно
0
|
27.03.2013, 14:30 | 9 |
Класс в зависимости от целевой системы инкапсулирует либо inotify, либо виндовые апи по наблюдению за файловой системой.
Т.е. если качаешь либы для линукса, то он через inotify, если для винды качаешь - через ВинАпи работает. Просто для любых платформ от предоставляет одинаковый интерфейс работы.
0
|
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
|
|
27.03.2013, 23:09 [ТС] | 10 |
Что-то не получается у меня с QFileInfo Но вы мне все и так очень сильно помогли. Спасибо всем!
0
|
28.03.2013, 10:06 | 11 |
Читай документацию. Там есть упоминание BSD и Mac OS X. В общем случае отдельных событий таких как IN_MOVED_FROM и IN_MOVED_TO может не быть, поэтому и интерфейс QFileSystemWatcher упрощенный.
0
|
28.03.2013, 10:30 | 12 |
Да я вобщем то и не утверждал, что он будет прокидывать именно эти события до пользователя. Я говорил, что он инкапсулирует в себе системные вызовы для каждой конкретной системы, и предоставляет интерфейс для уведомления об изменениях в файловой структуре. Остальные события, как писал выше надо ловить через QFilrInfo/QFile/QDir (которые в свою очередь свои системные фишки инкапсулируют).
0
|
28.03.2013, 10:30 | |
28.03.2013, 10:30 | |
Помогаю со студенческими работами здесь
12
Наблюдение Наблюдение Скрытное наблюдение Любопытное наблюдение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |