Как е по-добре да внедрите запис в 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 (последен влязъл, първи излязъл), мисля, че това е, което търсите.
Натиснете всеки низ, докато идва, и след това извадете всички низове:
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
Благодаря. Въпросът е, че имам няколко QList‹QString›. И трябва да запазя тези низове два пъти, първият в прав ред, вторият в обратен ред. И бих искал да запиша и двата файла наведнъж и да не създавам дубликати на моите низове в обратен ред. Но изглежда, че няма друг начин да съберем всички низове в един списък или стек и да прочетем списъка два пъти в пряк и обратен ред....
- person Funt; 29.02.2012
Така че можете да използвате QVector, тъй като имате директен достъп до елемент. Вижте моята редакция.
- person Patrice Bernassola; 29.02.2012
Прочетете целия файл. Запазете го във вектор от QStrings в паметта. Преминете през вектора, обръщайки всички низове и запазете този вектор във файла отново.
person
Ian Medeiros
schedule
28.02.2012