Импорт/экспорт списка из бинарного файла с возможным расширением - 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, указывая на успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д