Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
1

Наблюдение за папкой, используя inotify

25.03.2013, 17:02. Показов 3092. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Существует общая папка большой сети, к которой каждый пользователь компьютера сети имеет доступ как и чтения так и записи. Я делаю программу в QT Creator на языке C++ для ОСи - Ubuntu, используя Inotify(т.к C++, то в моём случае - inotify-cxx), которая должна наблюдать за изменениями папки(создание файла, переименование, удаление...).

Переименование в Unix системах проходит двумя событиями - IN_MOVED_FROM и IN_MOVED_TO. Мне программа это впринципе и выдаёт, что верно! Но хотелось бы, чтобы вместо двух этих событий было одно - IN_RENAMED

В Inotify для этого якобы существуют "cookies", даже пишут что только для события Переименования эти Куки и нужны, но НИГДЕ я не нашёл примера использования этих куков... Поэтому я здесь...нуждаюсь в помощи в решении этого вопроса.

P.S. В Windows это делается в 1000 раз проще
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2013, 17:02
Ответы с готовыми решениями:

Как отслеживать и соответственно вовремя изменить картинку с закрытой папкой на картинку с открытой папкой?
1) Как отслеживать и соответственно вовремя изменить картинку с закрытой папкой на картинку с...

Не могу разобраться с папкой Desktop и скрытой папкой Public Desktop
Я хочу получить возможность взаимодействия с ярлыками. Одни ярлыки находятся по адресу...

Работа с inotify
Хотел задать вопрос кто-то работал с данным видом API и его удобно вообще включать в достаточно...

Наблюдение
Для добавления источников обновления есть ресурс urpmi.mandriva.ru. По личным наблюдениям, если...

11
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
25.03.2013, 17:37 2
QFileSystemModel может без проблем мониторить каталоги... и вероятней всего она в себе инкапсулирует Inotify.
0
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
26.03.2013, 03:36 3
Цитата Сообщение от Кудя Посмотреть сообщение
делаю программу в QT Creator на языке C++ для ОСи - Ubuntu, используя Inotify(т.к C++, то в моём случае - inotify-cxx)
А причем тогда библиотека Qt, если вопрос исключительно по Inotify?
Если бы делал программу в какой-нибудь IDE типа Anjuta, то вопрос бы задавал в форуме по GTK? Такая что ли логика?

Добавлено через 7 минут
Цитата Сообщение от oxotnik Посмотреть сообщение
QFileSystemModel
Наверное, имелся ввиду класс QFileSystemWatcher, у которого такой статус:
QFileSystemWatcher
State: Deprecated
Reasoning: flawed design, a replacement is required. We’re open for ideas in that area.
1
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
26.03.2013, 23:56  [ТС] 4
Цитата Сообщение от kamre Посмотреть сообщение
А причем тогда библиотека Qt, если вопрос исключительно по Inotify?
Если бы делал программу в какой-нибудь IDE типа Anjuta, то вопрос бы задавал в форуме по GTK? Такая что ли логика?
Я просто хотел, чтобы человек, читающий мою проблему знал как можно больше информации во избежании недопониманий. Неужели обязательно было писать своё мнение о моём способе создания содержания темы...

Цитата Сообщение от kamre Посмотреть сообщение
QFileSystemWatcher
Спасибо за ответ. Странно что раньше я не натыкался на этот класс... Сейчас же буду реализовывать этот способ наблюдения за папкой.

Но! Также я надеюсь, что кто-нибудь опишет, как же использовать cookies в Inotify.

Добавлено через 4 часа 25 минут
Цитата Сообщение от oxotnik Посмотреть сообщение
и вероятней всего она в себе инкапсулирует Inotify.
Да, QFileSystemWatcher содержит в себе Inotify.

Я уже опробовал QFileSystemWatcher в действии, очень удобный класс. Но, к сожалению, я не нашёл способа обрабатывать события. Мне нужно сортировать события. Для визуального представления: Человек локальной сети создаёт файл в папке, за которой следит программа. Программа должна выдать следующее:
["время": CREATED "путь и имя файла"]
Аналогично при Переименовании, Удалении...
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.03.2013, 09:25 5
Цитата Сообщение от Кудя Посмотреть сообщение
Я уже опробовал QFileSystemWatcher в действии, очень удобный класс. Но, к сожалению, я не нашёл способа обрабатывать события. Мне нужно сортировать события. Для визуального представления: Человек локальной сети создаёт файл в папке, за которой следит программа. Программа должна выдать следующее:
["время": CREATED "путь и имя файла"]
Аналогично при Переименовании, Удалении...
Он выдает сигнал, что прошли изменения, и ничего более.
Что бы узнать что и как изменилось, надо задействовать 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
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.03.2013, 14:01 7
Цитата Сообщение от Кудя Посмотреть сообщение
Просто класс ущемил, подавил некоторые возможности...
Нет, его как раз реализовали так, что бы не было всяких ненужностей и двояких толкований. Все остальное реализовано в QFile & QFileInfo.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
27.03.2013, 14:09 8
Цитата Сообщение от Кудя Посмотреть сообщение
P.S. Я более чем уверен, что QFileSystemWatcher содержит в себе Inotify(или основан на Inotify), который умеет сортировать события.
Note: On systems running a Linux kernel without inotify support, file systems that contain watched paths cannot be unmounted.
Цитата Сообщение от Кудя Посмотреть сообщение
Просто класс ущемил, подавил некоторые возможности...
А в других ОС inotify есть?
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.03.2013, 14:30 9
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
А в других ОС inotify есть?
Класс в зависимости от целевой системы инкапсулирует либо inotify, либо виндовые апи по наблюдению за файловой системой.
Т.е. если качаешь либы для линукса, то он через inotify, если для винды качаешь - через ВинАпи работает. Просто для любых платформ от предоставляет одинаковый интерфейс работы.
0
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
27.03.2013, 23:09  [ТС] 10
Что-то не получается у меня с QFileInfo Но вы мне все и так очень сильно помогли. Спасибо всем!
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
28.03.2013, 10:06 11
Цитата Сообщение от oxotnik Посмотреть сообщение
Класс в зависимости от целевой системы инкапсулирует либо inotify, либо виндовые апи по наблюдению за файловой системой.
Т.е. если качаешь либы для линукса, то он через inotify, если для винды качаешь - через ВинАпи работает. Просто для любых платформ от предоставляет одинаковый интерфейс работы.
Читай документацию. Там есть упоминание BSD и Mac OS X. В общем случае отдельных событий таких как IN_MOVED_FROM и IN_MOVED_TO может не быть, поэтому и интерфейс QFileSystemWatcher упрощенный.
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
28.03.2013, 10:30 12
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
В общем случае отдельных событий таких как IN_MOVED_FROM и IN_MOVED_TO может не быть, поэтому и интерфейс QFileSystemWatcher упрощенный.
Да я вобщем то и не утверждал, что он будет прокидывать именно эти события до пользователя. Я говорил, что он инкапсулирует в себе системные вызовы для каждой конкретной системы, и предоставляет интерфейс для уведомления об изменениях в файловой структуре. Остальные события, как писал выше надо ловить через QFilrInfo/QFile/QDir (которые в свою очередь свои системные фишки инкапсулируют).
0
28.03.2013, 10:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2013, 10:30
Помогаю со студенческими работами здесь

Наблюдение
Смотрю я и вижу что траф то упал, но не в таких пропорциях как позиции. Конечно я учитываю что...

Наблюдение
В общем такая ситуация произошла. Был сайт с тиц 10 :) после пересчета пр, он поднялся с 0 до 1....

Скрытное наблюдение
Есть у меня такая программа: Скрытая Камера 2.14 - Программа Скрытая Камера предназначена для...

Любопытное наблюдение
После дефолта тИЦ-а много нервов утекло:) В последний пересчет неожиданно обнаружил, что у моих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru