| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Запись (чтение) структуры в (из) файл(а) |
| Автор: Syberex 23.8.2007, 10:55 | ||
Трабла такая , есть такая вот структура:
как мне записать массив таких структур в файл, а потом считать их целиком или произвольным доступом? |
| Автор: MAKCim 23.8.2007, 10:59 |
| Syberex, string - это std :: string? если да каждая запись в файле будет выглядеть следующим образом [<size_small + size_big + sizeof(long) + 500 + sizeof(int) * 52>]<size_small> <small> <size_big> <big> <mem> <char[500]> <int[50]> где число в [] показывает смещение следующей записи относительно адреса size_small |
| Автор: Syberex 23.8.2007, 11:33 |
| это понятно, но как именно записать, какой код нужен, укого есть примерчик записи чтения структур? |
| Автор: MAKCim 23.8.2007, 11:49 | ||
| Syberex, вот код
|
| Автор: Syberex 23.8.2007, 12:09 |
| хм, интерестный вариант, но эта функция структурно зависимая, а если структура поменяется то всё переделывать, а как записать и считать чтоб только в функцию структуру передать? |
| Автор: Lazin 23.8.2007, 12:27 |
| Можно добавить к структуре (классу) метод записывающий структуру в файл или поток, а так-же структуру читающую структуру из файла или(и) потока. Код который занимается загрузкой-сохранением не надо будет переделывать, даже если изменишь структуру. |
| Автор: Алина 26.8.2007, 05:39 | ||||
Можно попробовать работать с бинарными файлами. В такие файлы можно записывать структуру целиком.
#include <stdio.h> size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream); ptr - адрес, откуда будет начинаться коллекция блоков данных size - размер одного блока n - количество блоков stream - поток, куда записываем Всего будет записано n*size байтов, для работы с данными в таком режиме удобнее открыть файл как бинарный ("wb"):
|
| Автор: zkv 26.8.2007, 05:45 |
| Алина, весело будет, если среди членов будут динамические данные (либо объекты содержащие таковые) std::string как раз из этого разряда. по-моему, в этих условиях, правильнее всего определить соответствующий метод для структуры (если с++, ну и классом ее обозвать, если не хотим запутать врага). |