Чтение массива структур из бинарного файла - C++
Я - новичок в С++. Для разработки использую IDE C++Builder 10.4. Мне необходимо:
- Считать из StringGrid в массив структур некоторые ячейки (20 строк и 2 столбца), а затем записать этот массив структур в бинарный файл (.bin).
- Считать данные из этого бинарного файла обратно в массив структур, а затем записать данные из массива структур в ячейки 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 Как можно избежать этой ошибки? Прошу вашей помощи...