Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Считывание изменений содержимого файла

#cpp #qt #qt5


Некоторая программа постоянно дописывает определённое кол-во строк в N-е число файлов.
Мне необходимо в цикле проверять изменился ли файл, и если в него что-то дописали,
то считать эту информацию. Все файлы имеют обычное расширение txt. 
Существует ли уже готовое решение во фрейморке qt? так сказать "из коробки". 
    


Ответы

Ответ 1



Есть такой велосипед tail из GNU core utilities. # dpkg -S `which tail` coreutils: /usr/bin/tail Можно запустить tail -F /var/log/*.log, -F - флаг говорит утилите следить за изменениями. Таким образом Ваша задача решается. Сырцы tail на c: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c Кошмарные конечно, но всего 2400 строк. 2234 int main (int argc, char **argv) { там заполняются хидеры( заголовки ) потом на строке 2328 for (i = 0; i < n_files; i++) ok &= tail_file (&F[i], n_units); запускается матрёшка из tail-ов на файлы, которые уже в заголовках лежат. 1885 static bool tail_file (struct File_spec *f, uintmax_t n_units) { внутри вызывается просто tail() 1871 static bool tail (const char *filename, int fd, uintmax_t n_units, uintmax_t *read_pos) там вызывается tail_lines() 1809 static bool tail_lines (const char *pretty_filename, int fd, uintmax_t n_lines, uintmax_t *read_pos) И дальше там просто lseek-ами куски вытягиваются... Вообщем, может поможет. В крайнем случае, можно запустить tail -F {Ваш,Список,Файлов} как subprocess, и ловить pipe с него...

Комментариев нет:

Отправить комментарий