crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> как записать QList в QFile
eldar85
  опции профиля:
сообщение 11.4.2010, 16:32
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


list.removeAt(nameAr3);
        QFile file("1.txt");
        file.open(QFile::WriteOnly | QFile::Text);
                QDataStream strm(&file);
                strm << list;
file.close();

но почему файл получается бинарным??? и в нем какая то ерунда записывается)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 11.4.2010, 16:37
Сообщение #2


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Ты имеешь ввиду QList<QString>, QList<int> или что-то еще? Добавь конкретики.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.4.2010, 16:51
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(eldar85 @ 11.4.2010, 20:32) *
но почему файл получается бинарным???
потому-что в файл элементы списка надо писать по одному (посмотри конструкцию foreach в описании контейнеров). Просто в Qt предусмотрена сериализация некоторых классов в поток, собственным способом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.4.2010, 17:23
Сообщение #4


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


да именно
QList<QString>


попробывал foreach в строку запихать, но там лишь последняя строка отображается
list.removeAt(nameAr3);
        QString str;
        foreach(str, list);
        qDebug() << str;



вообще не въеду как fareach с файлами может работать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 11.4.2010, 17:43
Сообщение #5


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


QFile file("1.txt");
file.open(QFile::WriteOnly | QFile::Text);
QTextStream strm(&file);
foreach (const QString& str, list) {
        strm << str;
}
file.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.4.2010, 17:48
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(eldar85 @ 11.4.2010, 21:23) *
вообще не въеду как foreach с файлами может работать
значит ты не прочитал справку по нему, в описании контейнеров.
foreach -> for each -> для каждого
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.4.2010, 21:10
Сообщение #7


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


большое всем спасибо)

а как еще сделать чтобы файл перед записью в него очищался полностью, а то получается то что там уже было остается...плюс новое??
QFile file("1.txt");
file.open(QFile::WriteOnly | QFile::Text);
QTextStream strm(&file);
foreach (const QString& str, list) {
        strm << str;
}
file.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.4.2010, 21:18
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(eldar85 @ 11.4.2010, 22:10) *
а как еще сделать чтобы файл перед записью в него очищался полностью, а то получается то что там уже было остается...плюс новое??

Посмотри на флаг режима открытия: QIODevice::Truncate
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.4.2010, 21:34
Сообщение #9


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  




ок, сейчас почитаю про это, спасибо))

сделал так
QFile file("1.txt");
file.open(QFile::WriteOnly | QFile::Truncape);
QTextStream strm(&file);
foreach (const QString& str, list) {
        strm << str;
}
file.close();

в первый раз все как нужно получается, но программа работает в цикле и при втором заходе уже просто начинает добавлять к содержимому...
или я не правельно сделал??

Сообщение отредактировал eldar85 - 11.4.2010, 21:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.4.2010, 21:41
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(eldar85 @ 11.4.2010, 22:34) *
ок, сейчас почитаю про это, спасибо))

сделал так
QFile file("1.txt");
file.open(QFile::WriteOnly | QFile::Truncape);
QTextStream strm(&file);
foreach (const QString& str, list) {
        strm << str;
}
file.close();

в первый раз все как нужно получается, но программа работает в цикле и при втором заходе уже просто начинает добавлять к содержимому...
или я не правельно сделал??

Вообще достаточно одного флага WriteOnly, при его указании Truncape добавляется автоматически.

А ты уверен, что дописывается к файлу? Может ты список list забываешь очищать после записи? ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 11.3.2025, 4:47