Обратная запись текстового файла в QT

Как лучше реализовать запись в QFile в обратном порядке, построчно. При использовании seek(0) новая строка записывается поверх старой.


person Funt    schedule 28.02.2012    source источник
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
comment
Спасибо. Дело в том, что у меня мало QList‹QString›. И мне нужно сохранить эти строки дважды, первый в прямом порядке, второй в обратном. И я хотел бы записать оба файла сразу и не создавать дубликаты моих строк в обратном порядке. Но похоже, что нет другого пути, как собрать все строки в один список или стек и дважды прочитать список в прямом и обратном порядке.... - person Funt; 29.02.2012
comment
Таким образом, вы можете использовать QVector, поскольку вы можете напрямую обращаться к элементу. Смотрите мою правку. - person Patrice Bernassola; 29.02.2012

Прочитать весь файл. Сохраните его в векторе QString в памяти. Пройдитесь по вектору, перевернув все строки, и снова сохраните этот вектор в файл.

person Ian Medeiros    schedule 28.02.2012