Борис Гость
|
Добавлено: Чт Янв 16 2003 18:38 Заголовок сообщения: fwrite((void*)Massiv, sizeof(My),30,файл); fread((void*)Massiv, sizeof(My),30,файл);(+) |
|
|
так можно сделать чтение-запись самого массива, но пробежавшись по массиву, можно аналогично прочитать-записать и данные, на которые показывают указатели из самого массива. |
|
Ninelka Гость
|
Добавлено: Пт Янв 17 2003 16:07 Заголовок сообщения: Re: fwrite((void*)Massiv, sizeof(My),30,файл); fread((void*)Massiv, sizeof(My),30,файл);(+) |
|
|
Вот с этого места можно поподробнее %)) Как куда пробежаться?? |
|
Ninelka Гость
|
Добавлено: Пт Янв 17 2003 16:10 Заголовок сообщения: Re: fwrite((void*)Massiv, sizeof(My),30,файл); fread((void*)Massiv, sizeof(My),30,файл);(+) |
|
|
Вот с этого места можно поподробнее %)) Как куда пробежаться?? |
|
Борис Гость
|
Добавлено: Пт Янв 17 2003 17:38 Заголовок сообщения: Details for miss |
|
|
Abstract
Ваш массив содержит записи. Если какие-то из полей этих записей являются указателями, и они указывают на данные (логически важные для правильной интерпретации информации в массиве), то при просто записи массива в файл в местах, соответствующих указателям, запишутся адреса этих данных, а не сами данные. Поэтому в этом случае кроме записи самого массива необходимо записать и эти данные, иначе при последующем чтении будут восстановлены только сами массивы, но не свазанные с ними данные.
Если же таких, связанных через указатели, данных нет, то достаточно записать только сам массив.
Chapter 1
Запись
Запись простого массива Вы уже видели. Запись данных делается (например) так.
Пусть поле-указатель имеет имя "ukaz" и тип "tip_uk*", и участок памяти, на который он указывает содержит "kol_el" нужных данных. Файловый идентификатор пусть называется "fail"
Если kol_el не нужно сохранять в файле, то пример такой.
for(i=0;i < 30;i++){ fwrite((void*)Massiv[i].ukaz, sizeof(tip_uk),kol_el,fail); }
Если kol_el нужно сохранять в файле, то пример такой (kol_el в этом случае должен быть переменной).
for(i=0;i < 30;i++){ fwrite((void*) &kol_el, sizeof(kol_el),1,fail); fwrite((void*)Massiv[i].ukaz, sizeof(tip_uk),kol_el,fail); }
Chapter 2
Чтение
Чтение простого массива Вы уже видели. Чтение данных делается (например) так.
Примем те же соглашения по именам.
Если kol_el заранее известен (и не сохранен в файле), то примеры такие.
Если kol_el==1 for(i=0;i < 30;i++){
Massiv[i].ukaz=(tip_uk*)malloc(sizeof(tip_uk));
или Massiv[i].ukaz=new tip_uk;
fread((void*)Massiv[i].ukaz, sizeof(tip_uk),kol_el,fail); }
Если kol_el > 1 for(i=0;i < 30;i++){
Massiv[i].ukaz=(tip_uk*)calloc(sizeof(tip_uk),ko l_el); или Massiv[i].ukaz=new tip_uk [kol_el];
fread((void*)Massiv[i].ukaz, sizeof(tip_uk),kol_el,fail); }
Если kol_el заранее не известен (тогда он сохранен в файле), то пример такой (kol_el в этом случае как и при записи должен быть переменной).
for(i=0;i < 30;i++){ fread((void*) &kol_el, sizeof(kol_el),1,fail);
Massiv[i].ukaz=(tip_uk*)calloc(si zeof(tip_uk),kol_el); или Massiv[i].ukaz=new tip_uk [kol_el];
fwrite((void*)Massiv[i].ukaz, sizeof(tip_uk),kol_el,fail); }
Конец Естественно, нужны еще всякие проверки результатов записи-чтения-выделения памяти, и нужно учитывать, что в структуре может быть больше одного указателя . |
|