ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Записи фиксированного размераРассмотрим ситуацию, когда все записи в файле имеют фиксированный размер. В этом случае не составляет труда рассчитать смещение в пределах файла для доступа к записи по ее номеру. Пример Пусть i переменная типа long, в которой хранится номер записи к которой необходимо получить доступ, book указатель на буфер для размещения структуры типа MY_BOOKS, fptr ссылка на поток, открытый в режиме “rb” или “r+b”. Тогда для доступа к i-ой записи можно воспользоваться следующим набором операторов: fseek(fptr, (i - 1)*sizeof(MY_BOOKS), SEEK_SET); if(!fread(book, sizeof(MY_BOOKS), 1, fptr)) { perror(“Ошибка чтения!\т”); exit(3); } Контроль выхода за пределы файла Если есть опасность попытки чтения за пределами файла, то можно эту ситуацию проконтролировать например так:
fseek(fptr, 0L, SEEK_END); if(ftell(fptr) <= i * sizeof(MY_BOOKS)) puts(“Выход за пределы файла!\n”); …………………………………………………………………… Вопросы для самоконтроля · Перечислите параметры функций fread() и fwrite()! · Каким образом указывается сдвиг положения указателя текущей записи в файле на основе применения функции fseek()? · Почему операции поиска записей по ключу или по номеру в файле с записями переменной длины выполняются медленно? · Для чего применяются функции ftell(), fgetpos(), fsetpos()? · Позиционируйте указатель текущей записи в файле f в конец файла! – в начало файла! · Определите количество данных в файле f и количество записей struct MYSTR в файле! · Дать словесное описание того, как можно выполнить контроль выхода за пределы файла, если требуется доступ к i-й записи! Вопросы для самостоятельного изучения · Параметры и результаты работы функций ftell(), fgetpos(), fsetpos()?
Не нашли, что искали? Воспользуйтесь поиском:
|