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 показывает, насколько просто изменять данные в файле, не повреждая остальные записи.
ftinclude <stdio.h> ttinclude <string.h>