Обратно писане на текстов файл в 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 (последен влязъл, първи излязъл), мисля, че това е, което търсите.

Натиснете всеки низ, докато идва, и след това извадете всички низове:

QStack<QString> stack;
stack.push("first string");
stack.push("second string");
stack.push("third string");

while (!stack.isEmpty())
{
   QString string = stack.pop();
}

Редактиране: (нова информация в коментарите относно 2 файла за писане)

Използвайте 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

Прочетете целия файл. Запазете го във вектор от QStrings в паметта. Преминете през вектора, обръщайки всички низове и запазете този вектор във файла отново.

person Ian Medeiros    schedule 28.02.2012