Russian Qt Forum
Ноябрь 15, 2024, 09:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с чтением/записью  (Прочитано 4870 раз)
M9yT
Гость
« : Ноябрь 24, 2010, 22:24 »

Привет всем.
Пытаюсь сохранить в файл объекты некоторого класса(поле int и QString), используя для этого структуру типа
Код:
struct zap_adrs{
        int id;
        char adrs[50];
};
QString заменил char, т.к. вроде есть проблемы с записью этого типа.
Проблема в том, что после считывания у меня вместо русских символов отображаются "Непонимающий?".
Запись:

ID - абстрактный класс, пример упростил просто.
Код:
void WriteAddress(ID &ob, QFile &f)
{
        address *w;
        zap_adrs A;
        w=(address*)(&ob);
        A.id=w->get_id(); //возвращает значение одного из полей
        strcpy(A.adrs, w->get_name().toAscii());      //копирую в структуру другое поле
        f.write((char*)&A, sizeof(A));
}
Код:
void Programm::SaveToFile()
{
    QFile file("data.dat");
    WriteAddress(*(collection->at(0)), file);   //collection - это QVector< ID* >
    file.close();
}

Считывание:
Код:
void Programm::LoadFromFile()
{
    if(collection->size()!=0)
            collection->clear();
            QFile f("data.dat");
            zap_adrs A;
            address *a;
            f.read((char*)&A, sizeof(A));
            a=new address(A.id, A.adrs);
            collection->push_back(a);
            f.close();
}
Теперь в A.adrs закорючки.
« Последнее редактирование: Ноябрь 24, 2010, 22:28 от M9yT » Записан
BRE
Гость
« Ответ #1 : Ноябрь 24, 2010, 22:28 »

Посмотри на QDataStream.
Записан
M9yT
Гость
« Ответ #2 : Ноябрь 24, 2010, 22:29 »

Посмотри на QDataStream.

В QDataStream не перегружен оператор << для моего класса.
Записан
BRE
Гость
« Ответ #3 : Ноябрь 24, 2010, 22:31 »

В QDataStream не перегружен оператор << для моего класса.
Перегрузи или просто пиши/читай нужные поля своей структуры.
Записан
M9yT
Гость
« Ответ #4 : Ноябрь 24, 2010, 22:34 »

В QDataStream не перегружен оператор << для моего класса.
Перегрузи или просто пиши/читай нужные поля своей структуры.

Ок, сейчас попробую.
Записан
M9yT
Гость
« Ответ #5 : Ноябрь 24, 2010, 22:39 »

Тогда еще вопрос, писать char или QString можно?
Записан
BRE
Гость
« Ответ #6 : Ноябрь 24, 2010, 22:41 »

Тогда еще вопрос, писать char или QString можно?
QString
Записан
M9yT
Гость
« Ответ #7 : Ноябрь 24, 2010, 22:46 »

Тогда еще вопрос, писать char или QString можно?
QString

Просто когда я на VS делал то же самое в консоли, там при многократной записи String блоками ошибка появлялась.
Может здесь также?
Записан
BRE
Гость
« Ответ #8 : Ноябрь 24, 2010, 22:47 »

Что значит:
...многократной записи String блоками...
Записан
M9yT
Гость
« Ответ #9 : Ноябрь 24, 2010, 22:58 »

Что значит:
...многократной записи String блоками...

Ну не обязательно блоками, например:
fstream f("mycourse.txt", ios::out|ios::binary);
f.write((char*)&A, sizeof(A));
где структура А имеет поле String.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Ноябрь 25, 2010, 00:17 »

f.write((char*)&A, sizeof(A));
Это не будет работать для классов-объектов. Запрягайте QDataStream и операторы << и >>. Все равно придется, поэтому чем раньше - тем лучше
Записан
merke
Гость
« Ответ #11 : Ноябрь 25, 2010, 03:47 »

http://qt.ucoz.net/blog/zapis_struktury_polzovatelskogo_tipa_v_fajl/2010-11-16-104
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.