Russian Qt Forum
Ноябрь 26, 2024, 14:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись строки в начало QFile  (Прочитано 11003 раз)
WOLF
Гость
« : Август 07, 2013, 18:07 »

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

Дописывай в конец. Чтобы записать в начало надо открыть файл на запись и сделать seek(), но при этом ты сотрешь старое содержимое
Записан
WOLF
Гость
« Ответ #2 : Август 07, 2013, 18:33 »

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

Считать их в QStringList и перемешивать его как угодно
Или сразу добавлять в лист при помощи prepend
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Август 07, 2013, 18:38 »

в потоке нельзя ничего сохранить.

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
WOLF
Гость
« Ответ #5 : Август 07, 2013, 19:54 »

А считывать через readData или readLineData? я так понимаю считывать построчно и каждую новую строку отправлять в QStringList? А до какого момента читать, как узнать сколько всего строк в файле?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Август 07, 2013, 20:11 »

readLine(). пример как прочитать содержимое файла построчно есть в документации QFile.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
WOLF
Гость
« Ответ #7 : Август 07, 2013, 20:18 »

Спасибо, а то сегодня всю голову сломал с QDataStream, пытаясь склонить его к чтению) завтра попробую)
« Последнее редактирование: Август 07, 2013, 20:20 от WOLF » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Август 07, 2013, 21:38 »

обычный текст надо было читать с помощью QTextStream тогда уж. QDataStream больше для чтения «двоичных» данных подоходит.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
WOLF
Гость
« Ответ #9 : Август 07, 2013, 21:56 »

Буду пробывать c QStringList, посмотрим что получится
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Август 08, 2013, 13:18 »

Хочу сделать,чтобы последние сообщения были вверху. И появился вопрос - как записать строку в начало файла? Если открывать через QIODevice::Append, то всё пишется в конец файла, seek() как я понял не срабатывает.
Может быть какой-то лучший способ хранения сообщений предложите?
Без затей писать в конец файла, а выводить в обратном порядке (считав все в QStringList)
Записан
WOLF
Гость
« Ответ #11 : Август 08, 2013, 19:03 »

Сегодня попробывал считать всё в QStringList, записать в файл новую строку и в конец дописать обратно из QStringList. получилось очень легко и удобно Улыбающийся Всем большое спасибо за помощь)
Записан
mutineer
Гость
« Ответ #12 : Август 09, 2013, 10:05 »

только с ростом файла запись будет все медленее и медленее и жрать все больше памяти
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.