Импорт/экспорт списка из бинарного файла с возможным расширением - 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;
}

Объяснение кода листинга программы

  1. Типизация данных: используются типы unsigned long int и unsigned char для представления цены и байта соответственно.
  2. Структура продукта: определена структура Product, которая содержит поля для имени продукта, единицы измерения, цены и свойств.
  3. Функция printProd: реализована функция для вывода информации о продукте на консоль.
  4. Массив продуктов: созданы три продукта: prod1, prod2 и prod3. У prod1 и prod2 заполнены поля, у prod3 они пусты.
  5. Открытие файла: открыт файл с помощью функции fopen на запись и чтение (бинарный режим).
  6. Размер записи: вычислен размер записи в файле как 3 (размер одного продукта в байтах).
  7. Запись в файл: записаны prod1 и prod2 в файл с помощью функции fwrite.
  8. Переход в начало файла: использована функция fseek для перехода в начало файла.
  9. Чтение из файла: прочитан prod3 из файла с помощью функции fread.
  10. Вывод информации: вызваны функции printProd для вывода информации о prod3.
  11. Закрытие файла: использована функция fclose для закрытия файла.
  12. Возврат значения: функция main возвращает 0, указывая на успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы