Название: Чтение обновляемого файла Отправлено: NKovalev64 от Март 07, 2014, 11:08 Есть задача считывать данные из постоянно обновляемого файла, например лог веб-сервера.
Есть ли какие то средства для решения этой задачи непосредственно в Qt? Если нет, то как это можно сделать используя только средства С++? Название: Re: Чтение обновляемого файла Отправлено: Johnik от Март 07, 2014, 11:18 В Qt есть класс QFileSystemWatcher
Название: Re: Чтение обновляемого файла Отправлено: NKovalev64 от Март 07, 2014, 11:52 В Qt есть класс QFileSystemWatcher Так, ок. Допустим мы, используем этот, класс. Нам нужно оперативно считывать файл логa apache (например).1. Открываем файл -> считываем до конца. Закрываем? Или можно держать открытым? 2. Добавляем файл под наблюдение: void QFileSystemWatcher::addPath ( const QString & path ). 3. Ловим сигнал void QFileSystemWatcher::fileChanged ( const QString & path ) [signal] и отправляем его в слот считывания очередной порции данных. Это нормальная схема? Подразумевается что файл обновляется сколь угодно часто, например десятки раз в секунду. Таким образом мне видится следующая проблема: 1. В Файле N строк, которые считываются на первой итерации. 2. В файл добавляется X строк, ватчер испускает сигнал, идем в слот - читаем файл ДО КОНЦА. При этом пока мы читаем, ватчер может испустить еще сколь угодно много сигналов обновления файла и они встанут в очередь выполнения, но мы то уже прочитали файл до конца. Название: Re: Чтение обновляемого файла Отправлено: Bepec от Март 07, 2014, 12:03 Ну так напишите свой ватчер. Узнать размер файла вы сможете (я думаю вы можете!), запомнить прошлый размер файла тоже. Что остаётся? таймер и связывание всех действий.
Название: Re: Чтение обновляемого файла Отправлено: OKTA от Март 07, 2014, 12:13 http://freethreads.wordpress.com/2010/10/20/how-tail-f-work/
Есть замечательная утилитка в linux, называется tail. И замечательный ключик -f. Название: Re: Чтение обновляемого файла Отправлено: Johnik от Март 07, 2014, 12:14 вот проверил, вроде как надо работает:
testfileread.h Код
testfileread.cpp Код
Название: Re: Чтение обновляемого файла Отправлено: NKovalev64 от Март 08, 2014, 14:34 Всем спасибо за ответы! Пока буду использовать QFileSystemWatcher - пока что он показал себя очень хорошо, буду тестировать под нагрузками.
|