268______________________________Часть II. Программирование на C++

// Открыть существующий двоичный файл только на чтение if ((fHandle = fopen ( "NAMES.BIN", "rb")) == NULL) {

printf("%s\n","Error Opening File");

return (1) ;

}

// Последовательный просмотр файла и вывод значений

do (

Err = freadi&NameRecord, sizeof(NAMES), 1, fHandle);

if (Err)

//'Если Err равно нулю, то есть вызов fread() успешен,

// то напечатать имя

printf("%s\n",NameRecord.FirstName) ;

} while (Err) ;

// Закрыть файл fclose ( fHandle) ;

return (0); ^ }

Результат работы программы:

Nanci

Jim

David

Chip

Cheryl

Как видите, строки выглядят так же, как и у программы из листинга 12.5. Основное различие состоит в формате хранения данных на диске. Вне зависимости от размера каждое имя занимает на диске до 20 байт. Файл Nam.es.bin имеет длину 100 байт, в отличие от 33 байт файла с последовательным доступом. Это, наверное, самый большой недостаток файлов с произвольным доступом — место, занимаемое двоичной записью, всегда одно и то же, даже если запись пустая. Но это обстоятельство является также главным преимуществом таких файлов перед файлами с последовательным доступом. Поскольку размер каждой записи известен, доступ к любой из них может быть осуществлен без необходимости последовательного чтения всех записей с первой до искомой. Листинг 12.9 показывает, насколько просто изменять данные в файле, не повреждая остальные записи.

h02881.jpg

ftinclude <stdio.h> ttinclude <string.h>