Сегодня нужно было выделить время и написать небольшую записную книжечку для хранения адресов, фамилий, телефонов. Выделил время вечером - думал как раз справлюсь и на боковую. Не тут то было.

Для хранения данных использовал структуру, а для хранения структур решил использовать список (list) из STL. Хотелось еще попрактиковаться в написании своего шаблонного класса, но т.к. работы по горло и без этого решил использовать вариант STL.

Решил записывать структуры поочередно в файл следующим способом:

FILE *file; fopen_s( &file, "data.dat", "wb+" );
{
for(iter=spisok.begin();iter!=spisok.end();iter++)
{
//Запись ведется поструктурно (структура ent)
fwrite(&iter,sizeof(ent),1,file);
}
} fclose(file);

А для чтения из файла решил использовать код:

while (!feof(file))
{
ent e;
fread(&e,sizeof(ent),1,file);
spisok.push_back(e);
}

Программа компилируется, ошибок не вызывает, все работает корректно до тех пор пока не производится чтение из файла. Тогда при выводе в соответствующие поля выводится буква "B" и один иероглиф.

Чего я только не испробовал, даже вместо while (!feof(file)) вычислял размер файла, делил на размер структур - вычислял столько в файле записанных полей, но все верно, однако программа не работала.

Оказалось проблема была элементарной - вместо
fwrite(&iter,sizeof(ent),1,file)
нужно писать
fwrite(&(*iter),sizeof(ent),1,file)
Все глупо и элементарно - итератор, ведь, должен использоватся разименованым, если мы имеем дело с данными, которые хранит текущий узел динамической структуры. А так мы просто записывали данные итератора в файл, которые кроме билеберды ничего для человека не представляют.
Теперь я раз и навсегда запомню этот поход по граблям.

Уже почти 3 утра, пошел спать...

Запись опубликована Воскресенье, Июль 13, 2008 в 1:59 в рубрике Все вместе, Программирование. Вы можете проследить за всеми комментариями через RSS 2.0 . Вы можете пролистать запись до конца и оставить отзыв. Уведомления в настоящее время не разрешены.

Оставить комментарий

Имя (*)
E-mail (не публикуется) (*)
URI
Комментарий