Импорт/экспорт списка из бинарного файла с возможным расширением - C (СИ)
Формулировка задачи:
Добрый день.
У меня вопрос такого характера: что следует учесть при написании функций импорта/экспорта списка структур из\в бинарный файл, если существует вероятность того, что структура будет расширена новыми полями. Или опасаться нечего на этот счет?
Решение задачи: «Импорт/экспорт списка из бинарного файла с возможным расширением»
textual
Листинг программы
typedef unsigned long int price;
typedef unsigned char byte;
typedef struct
{
char Name[PRODUCT_NAME_SIZE +1];
char UnitName[UNIT_NAME_SIZE +1];
price Price;
byte Properties;
//char newField[30];
} Product;
void printProd(Product *prod)
{
printf("%s (%s) %d :::: %d\n",
//new: %s\n",
prod -> Name, prod->UnitName, prod->Price, prod->Properties/*, prod -> newField*/);
}
int main(int argc, char *argv[]) {
Product prod1 = {.Name = "CocaCola", .UnitName = "OZ", .Price = 250, .Properties = 15/*, .newField = "newField1"*/};
Product prod2 = {.Name = "Snikers", .UnitName = "Pack", .Price = 75, .Properties = 13/*, .newField = "newField2"*/};
Product prod3;
int size;
FILE *file = fopen(PATH, "wb+");
if (file == NULL)
{
printf("no such file \n");
return 1;
}
size = fwrite(&prod1, sizeof(Product), 1, file);
size = fwrite(&prod2, sizeof(Product), 1, file);
if (size > 0) printf("write successeded\n");
fseek(file, 0, SEEK_SET);
fread(&prod3, sizeof(Product), 1, file);
printProd(&prod3);
fread(&prod3, sizeof(Product), 1, file);
printProd(&prod3);
fclose(file);
return 0;
}
Объяснение кода листинга программы
- Типизация данных: используются типы unsigned long int и unsigned char для представления цены и байта соответственно.
- Структура продукта: определена структура Product, которая содержит поля для имени продукта, единицы измерения, цены и свойств.
- Функция printProd: реализована функция для вывода информации о продукте на консоль.
- Массив продуктов: созданы три продукта: prod1, prod2 и prod3. У prod1 и prod2 заполнены поля, у prod3 они пусты.
- Открытие файла: открыт файл с помощью функции fopen на запись и чтение (бинарный режим).
- Размер записи: вычислен размер записи в файле как 3 (размер одного продукта в байтах).
- Запись в файл: записаны prod1 и prod2 в файл с помощью функции fwrite.
- Переход в начало файла: использована функция fseek для перехода в начало файла.
- Чтение из файла: прочитан prod3 из файла с помощью функции fread.
- Вывод информации: вызваны функции printProd для вывода информации о prod3.
- Закрытие файла: использована функция fclose для закрытия файла.
- Возврат значения: функция main возвращает 0, указывая на успешное выполнение.