Qt: ожидание закрытия файла другим процессом - PullRequest
2 голосов
/ 10 сентября 2010

У меня есть демон (obexpushd), который записывает некоторые файлы в каталог. В моем приложении Qt я слушаю изменения в этом каталоге благодаря QFileSystemWatcher. Тем не менее, сигнал directoryChanged испускается, когда obexpushd создает файл, а не когда он завершил запись.

Итак, я должен подождать, пока obexpush завершит запись файла, прежде чем обрабатывать его. Какова лучшая стратегия?

Проверить, что размер остается неизменным в течение фиксированного периода времени? Вызовите lsof с фиксированным интервалом? Есть лучшее решение?

Ответы [ 3 ]

2 голосов
/ 10 сентября 2010

Является ли obexpushd программой, которую вы можете изменить?Если это так, то, вероятно, проще всего было бы сделать запись obexpushd во временный файл, а затем переименовать файл, когда он закончит запись.Это было бы то, что вы могли бы отслеживать в своей программе Qt.Более надежным и элегантным способом было бы использовать obexpushd для связи с вашей программой Qt, может быть, через dbus, чтобы явно сказать, когда это будет сделано.

Если obexpushd не находится под вашим контролем, тогда одна из стратегий, которую вы 'Вы, наверное, лучше всего выбрали.

0 голосов
/ 10 сентября 2010

Кажется, есть открытая ошибка по этому вопросу http://bugreports.qt -project.org / browse / QTBUG-3576 .Если вы знаете имена файлов ожидающих файлов, возможно, вы можете использовать QFileSystemWatcher::fileChanged().

0 голосов
/ 10 сентября 2010

Вы можете наблюдать за изменениями временных меток файлов. QFileInfo делает это возможным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...