А вот с массивом Well будет немного посложнее. Дело в том, что массив Well — это не тип, а набор элементов типа TCard. Таких элементов в Well, очевидно, 5*5*PACK_TOTAL Тогда размер всего массива в байтах составит:
sizeof(TCard)*5*5*PACK_TOTAL
Адрес начала массива тоже определяется по-другому. Можно выяснить адрес его самого первого элемента (с индексами (0, 0, 0)) — &Well[0][0][0], но это несколько громоздко. В Си++ принято, что адресом любого массива будет просто упоминание этого массива — Well. Тогда соответствующий оператор записи в файл будет выглядеть следующим образом:
FileWrite(iFile, Well, sizeof(TCard)* 5 * 5 *PACK_TOTAL) ;
В качестве второго параметра (адреса начала блока байтов) указан адрес массива — Well.
is Чтобы получить адрес любого массива с произвольным числом измере-¦ ни и, «достаточно использовать в программе его имя. .
Контроль за ошибками
Каждую операцию вывода в файл, так же, как и его открытие, надо проверять — не возникла ли по каким-то причинам ошибка, например, если на диске нет свободного места. Функция FileWrite() в случае ошибки возвращает число (-1) — это и надо контролировать сразу за каждым вызовом соответствующей функции. Для этого в начале метода надо определить временную переменную:
int err;
Контролироваться корректность вывода будем так:
err = FileRead(iFile, Well,
sizeof(TCard)* 5 * 5 *PACK_TOTAL) ;
if( err == -1 )
{
ShowMessageC'Well" + BAD_OUTPUT_STR) ;
FileClose(iFile) ;
return ;
) В файле Text.h надо описать текстовую константу:
const AnsiString BAD_OUTPUT_STR = " не выводится";'
233