Чтение массива структур из бинарного файла - C++

Я - новичок в С++. Для разработки использую IDE C++Builder 10.4. Мне необходимо:

  1. Считать из StringGrid в массив структур некоторые ячейки (20 строк и 2 столбца), а затем записать этот массив структур в бинарный файл (.bin).
  2. Считать данные из этого бинарного файла обратно в массив структур, а затем записать данные из массива структур в ячейки StringGrid. Но уже после чтения данных из файла при попытке помещения информации из массива структур в StringGrid получаю ошибку C++Builder:

Abnormal program termination

Помогите, пожалуйста, разобраться с такой проблемой?...

Моя структура имеет вид:

`struct reader
{
    String name;
    String phone;
};`

Запись в файл делаю так:

`   String filename = ExtractFilePath(ParamStr(0)) + "readers.bin";
    // Массив структур для записи
    reader * readersInfo = new reader[20];

    // Заполнение массива структур значениями из таблицы
    for(int i = 0; i < 20; i++)
    {
        readersInfo[i].name = ScheduleGrid->Cells[0][i + 1];
        readersInfo[i].phone = ScheduleGrid->Cells[1][i + 1];
    }

    // Открытие файла для записи
    FILE *stream;
    if ((stream = _wfopen(filename.c_str(), L"w")) == nullptr)
    {
        ShowMessage("Не удается открыть файл \"readers.bin\".");
    }
    // Запись массива структур в файл
    if (fwrite(readersInfo, sizeof(readersInfo[0]), 20, stream) != 20)
    {
        ShowMessage("Ошибка записи файла \"readers.bin\".");
    }
    fclose(stream);`

Чтение из файла пытаюсь реализовать таким образом:

`   String filename = ExtractFilePath(ParamStr(0)) + "readers.bin";
    FILE *stream;
    // Массив для чтения структур
    reader readersInfo[20];

    // Открытие файла для чтения
    if ((stream = _wfopen(filename.c_str(), L"r")) == nullptr)
    {
        ShowMessage("Не удается открыть файл \"readers.bin\".");
    }

    // Чтение массива структур из файла
    if (fread(readersInfo, sizeof(readersInfo[0]), 20, stream) != 20)
    {
        ShowMessage("Ошибка чтения файла \"readers.bin\".");
    }

    // Заполнение таблицы значениями из массива структур
    for(int i = 0; i < 20; i++)
    {
        ScheduleGrid->Cells[0][i + 1] = readersInfo[i].name;
        ScheduleGrid->Cells[1][i + 1] = readersInfo[i].phone;
    }

    fclose(stream);`

Однако уже при попытке помещения информации из массива структур в ScheduleGrid на строке:

`ScheduleGrid->Cells[0][i + 1] = readersInfo[i].name;`

получаю ошибку C++Builder:

Abnormal program termination Как можно избежать этой ошибки? Прошу вашей помощи...


Ответы (0 шт):