Как лучше реализовать запись в QFile в обратном порядке, построчно. При использовании seek(0) новая строка записывается поверх старой.
Обратная запись текстового файла в QT
comment
Вы хотите писать в файл с конца в начало, или вы просто хотите перевернуть текстовый файл?
- person Spidey   schedule 29.02.2012
comment
Мне нужно записать в файл с конца в начало. У меня нет файла, мне нужно записать данные.
- person Funt   schedule 29.02.2012
comment
Я не думаю, что это возможно на уровне FS/OS. Вы должны сначала вернуть свои данные, а затем записать их последовательно. Самое близкое, что вы можете сделать, чтобы записать его в обратном направлении, это дополнить его до конца, искать каждый байт от конца к началу и записывать байт за байтом. Это не очень хорошая стратегия, если у вас достаточно памяти, вы должны сложить все в стек, а затем распаковать и записать каждый из них.
- person Spidey   schedule 01.03.2012
Ответы (2)
Вы должны использовать QStack
QString. Поскольку это контейнер LIFO (Last In First Out), я думаю, это то, что вы ищете.
Нажимайте каждую строку по мере их поступления, а затем извлекайте все строки:
QStack<QString> stack;
stack.push("first string");
stack.push("second string");
stack.push("third string");
while (!stack.isEmpty())
{
QString string = stack.pop();
}
Изменить: (новая информация в комментариях относительно двух файлов для записи)
Используйте Qvector
для хранения всех QString. Затем в цикле for доступ к первому и последнему элементу для записи их в каждый файл. Это можно сделать следующим образом:
QVector<QString> vector;
vector.append("first string");
vector.append("second string");
vector.append("third string");
int size = vector.size();
for (int i=0; i<size; i++)
{
QString string1 = vector[0]; // write it in one file
Qstring string2 = vector[size-1-i]; // write it in another file
}
Надеюсь это ответит на твой вопрос.
person
Patrice Bernassola
schedule
28.02.2012
Спасибо. Дело в том, что у меня мало QList‹QString›. И мне нужно сохранить эти строки дважды, первый в прямом порядке, второй в обратном. И я хотел бы записать оба файла сразу и не создавать дубликаты моих строк в обратном порядке. Но похоже, что нет другого пути, как собрать все строки в один список или стек и дважды прочитать список в прямом и обратном порядке....
- person Funt; 29.02.2012
Таким образом, вы можете использовать QVector, поскольку вы можете напрямую обращаться к элементу. Смотрите мою правку.
- person Patrice Bernassola; 29.02.2012
Прочитать весь файл. Сохраните его в векторе QString в памяти. Пройдитесь по вектору, перевернув все строки, и снова сохраните этот вектор в файл.
person
Ian Medeiros
schedule
28.02.2012