Сериализация структур - PullRequest
       8

Сериализация структур

0 голосов
/ 02 апреля 2009

Я работаю над проектом домашней работы и пытаюсь сохранить данные инвентаризации в файл.

Размер данных инвентаризации не должен быть слишком большим, потому что технически никто не собирается его использовать.

Мне нужно записать это содержимое в файл:

• Описание товара • Количество на руках • Оптовая стоимость • Розничная стоимость • Дата добавлена ​​в инвентарь

Мне нужно создать интерфейс, который позволит мне сделать это:

• Добавить новые записи в файл • Показать любую запись в файле • Изменить любую запись в файле

Struct был бы самым простым способом сделать это. Если я могу просто понять, как читать / записывать структуры в файл, это будет действительно легко.

Если бы вы могли привести небольшой пример того, как это сделать, я был бы очень признателен.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 02 апреля 2009

Если вы не возражаете против действительно низкого уровня, вы можете просто скопировать структуры внутрь и наружу, приведя указатель на структуру к void* и используя sizeof(), чтобы получить длину структуры. (IIRC - это способ выгрузить / прочитать пустой буфер в / из файла)


Обратите внимание, это ТОЛЬКО работает, если данные не имеют указателей / ссылок / и т.д.


Мне нравится C's IO лучше, чем C ++, поэтому:

typedef struct { int hi; int mon; char[35] dat; } S;

S s;
S arr[22];
int f;

  // write
f = open(/* I forget the args*/);

  // one
if(sizeof(s) != write(f, &s, sizeof(s))) Error();
  // many
if(sizeof(arr) != write(f, arr, sizeof(arr))) Error();

close(f);

  // read
f = open(/* I forget the args*/);

  // one
if(sizeof(s) != read(f, &s, sizeof(s))) Error();
  // many
if(sizeof(arr) != read(f, arr, sizeof(arr))) Error();

close(f);
2 голосов
/ 02 апреля 2009

Спросите своего учителя, не могли бы вы использовать библиотеку повышения.
Если да, прочитайте учебник по усиленной сериализации, он содержит простые примеры: http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/tutorial.html

Но если вы хотите понять, как работать с файлами, вы должны сделать это без какой-либо помощи или поддержки.

Если вы хотите работать с std :: [io] fstreams, вы должны решить, какой формат вы будете поддерживать:
- text - для этого случая лучше всего определить operator << и operator >> и использовать их для записи структуры в файл или чтения;
- двоичная - ваша структура должна быть POD (обычные старые данные) и не должна содержать указателей - и вы будете использовать методы потоков чтения и записи.
пример для двоичного файла:
http://www.codeguru.com/forum/showthread.php?t=269648

1 голос
/ 02 апреля 2009

Библиотека IOStream делает это

Класс ofstream предоставляет интерфейс для записи данных в файлы в виде потоков вывода.

Класс ifstream предоставляет интерфейс для чтения данных из файлов как потоков ввода

Edit- Пример

0 голосов
/ 02 апреля 2009

Я бы пошел с XML; он структурирован, основан на тексте, поэтому вы можете посмотреть его в любом текстовом редакторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...