Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись структур в файл, запись и чтение 
:(
    Опции темы
TupDub
Дата 10.12.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Привет народ!
у меня вопрос, который стар как мир... я пытаюсь записать в файл структуру и прочесть её. Не получается.... 
вот мой код:
Код

struct    chamber
{
    vector<int> wires;
};


struct    event
{
    chamber Chamber[8];
};

int main(int argc, char* argv[])
{
    string filename = "stFile.dat";
    FILE *file;
    if((file = fopen(filename.c_str(),"w+"))!=false)
    {
    event Event;
        for(int i=0;i < 8; i++)
        {
              for(int wire=0; wire< 100; wire++)
                         Event.Chamber[i].wires.push_back(wire);
        }
    fwrite(&Event, sizeof(event), 1, file);

                 if(file!=false) fclose(file);
    }
    else    cout<<"\n File don't exist! \n"<<endl;

                //Read
    if((file = fopen(filename.c_str(),"r+"))!=false)
    {
            event Revent;
            fread(&Revent, sizeof(Revent), 1, file);
                                    fclose(file);
            cout<<"to be continued ... :) )) "<<endl;
    }

    return 0;
}


программа падает при чтении... я пробую разные варианты, но у меня не получается.
Помогите разобраться...  
Спасибо.
PM   Вверх
xvr
Дата 10.12.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Прямо записывать в файл можно только POD типы и массивы и структуры из них состоящие. (За исключением указателей на что угодно). Попытка записать объект (а vector<> - это именно объект), скорее всего закончится неуспешно (точнее, он запишется, но не прочтется).
Для записи таких объектов применяется серилизация (streaming). Но это в компилятор не встроенно и делается руками (или спеуиальными библиотеками)

PM MAIL   Вверх
TupDub
Дата 10.12.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



xvr, 
а можно привер простенький, как использовать streaming для записи вектора в бинарный файл ?
PM   Вверх
xvr
Дата 10.12.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(TupDub @ 10.12.2009,  13:47)
xvr, 
а можно привер простенький, как использовать streaming для записи вектора в бинарный файл ?

Конкретно данный вектор можно записать так:
Код

size_t total=Event.Chamber[0].wires.size();
fwrite(&total,sizeof(total),1,file);
for(size_t i=0;i<total;++i)
{
  int v=Event.Chamber[0].wires[i];
  fwrite(&v,sizeof(v),1,file);
}
А вообще для streaming'а нужен целый framework - одной функции недостаточно  smile 
Посмотри boost::serialization

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.