Russian Qt Forum

Qt => Вопросы новичков => Тема начата: WOLF от Август 07, 2013, 18:07



Название: Запись строки в начало QFile
Отправлено: WOLF от Август 07, 2013, 18:07
Доброго времени суток! Необходимо хранить журнал сообщений и по кнопке выводить его на экран. Решил использовать обычный .txt через QFile. Хочу сделать,чтобы последние сообщения были вверху. И появился вопрос - как записать строку в начало файла? Если открывать через QIODevice::Append, то всё пишется в конец файла, seek() как я понял не срабатывает.
Может быть какой-то лучший способ хранения сообщений предложите?


Название: Re: Запись строки в начало QFile
Отправлено: mutineer от Август 07, 2013, 18:19
Дописывай в конец. Чтобы записать в начало надо открыть файл на запись и сделать seek(), но при этом ты сотрешь старое содержимое


Название: Re: Запись строки в начало QFile
Отправлено: WOLF от Август 07, 2013, 18:33
Дописывай в конец. Чтобы записать в начало надо открыть файл на запись и сделать seek(), но при этом ты сотрешь старое содержимое
Но потом тогда строки придётся в обратном порядке выводить...
Я думал сделать так: скопировать в поток текущее содержимое, потом со стирание записать новую строку в файл и после этого открыть его через Append и дописать в конец то, что в потоке сохранил, но там из потока вместо текста краказяблы пишутся...
А как можно строки выводить в обратном порядке тогда из QFile? Или может есть что-то, помимо QFile, куда можно писать в начало?


Название: Re: Запись строки в начало QFile
Отправлено: mutineer от Август 07, 2013, 18:37
Считать их в QStringList и перемешивать его как угодно
Или сразу добавлять в лист при помощи prepend


Название: Re: Запись строки в начало QFile
Отправлено: kambala от Август 07, 2013, 18:38
в потоке нельзя ничего сохранить.

можешь считать все строки в QStringList, дописать нужную строку в начало списка и сохранить строки списка в файл.


Название: Re: Запись строки в начало QFile
Отправлено: WOLF от Август 07, 2013, 19:54
А считывать через readData или readLineData? я так понимаю считывать построчно и каждую новую строку отправлять в QStringList? А до какого момента читать, как узнать сколько всего строк в файле?


Название: Re: Запись строки в начало QFile
Отправлено: kambala от Август 07, 2013, 20:11
readLine(). пример как прочитать содержимое файла построчно есть в документации QFile.


Название: Re: Запись строки в начало QFile
Отправлено: WOLF от Август 07, 2013, 20:18
Спасибо, а то сегодня всю голову сломал с QDataStream, пытаясь склонить его к чтению) завтра попробую)


Название: Re: Запись строки в начало QFile
Отправлено: kambala от Август 07, 2013, 21:38
обычный текст надо было читать с помощью QTextStream тогда уж. QDataStream больше для чтения «двоичных» данных подоходит.


Название: Re: Запись строки в начало QFile
Отправлено: WOLF от Август 07, 2013, 21:56
Буду пробывать c QStringList, посмотрим что получится


Название: Re: Запись строки в начало QFile
Отправлено: Igors от Август 08, 2013, 13:18
Хочу сделать,чтобы последние сообщения были вверху. И появился вопрос - как записать строку в начало файла? Если открывать через QIODevice::Append, то всё пишется в конец файла, seek() как я понял не срабатывает.
Может быть какой-то лучший способ хранения сообщений предложите?
Без затей писать в конец файла, а выводить в обратном порядке (считав все в QStringList)


Название: Re: Запись строки в начало QFile
Отправлено: WOLF от Август 08, 2013, 19:03
Сегодня попробывал считать всё в QStringList, записать в файл новую строку и в конец дописать обратно из QStringList. получилось очень легко и удобно :) Всем большое спасибо за помощь)


Название: Re: Запись строки в начало QFile
Отправлено: mutineer от Август 09, 2013, 10:05
только с ростом файла запись будет все медленее и медленее и жрать все больше памяти