Обработка двоичных файлов
При записи информации в двоичный файл символы и числа записываются в виде последовательности байт. Для того чтобы записать данные в двоичный файл, необходимо:
Для того чтобы считать данные из двоичного файла, необходимо:
Рассмотрим основные функции, необходимые для работы с двоичными файлами. Для открытия файла предназначена функция fopen. FILE *fopen(const *filename, const char *mode) Здесь filename — строка, в которой хранится полное имя открываемого файла, mode — строка, определяющая режим работы с файлом; возможны следующие значения:
Функция возвращает в файловой переменной f значение NULLв случае неудачного открытия файла. После открытия файла доступен 0-й его байт, указатель файла равен 0, значение которого по мере чтения или записи смещается на считанное (записанное) количество байт. Текущие значение указателя файла — номер байта, начиная с которого будет происходить операция чтения или записи. Для закрытия файла предназначена функция fclose: int fclose(FILE *filename); Она возвращает 0 при успешном закрытие файла и EOF в противном случае. Функция remove предназначена для удаления файлов: int remove(const char *filename); Эта функция удаляет с диска файл с именем filenema. Удаляемый файл должен быть закрыт. Функция возвращает ненулевое значение, если файл не удалось удалить. Для переименования файлов предназначена функция rename: int rename(const char *oldfilename, const char *newfilename); Первый параметр — старое имя файла, второй — новое. Возвращает 0 при удачном завершении программы. Чтение из двоичного файла осуществляется с помощью функции fread: fread(void *ptr, size, n, FILE *filename); Функция fread считывает из файла filename в массив ptr n элементов размера size. Функция возвращает количество считанных элементов. После чтения из файла его указатель смещается на n*size байт. Запись в двоичный файл осуществляется с помощью функции fwrite: fwrite(const void *ptr, size, n, FILE *filename); Функция fwrite записывает в файл filename из массива ptr n элементов размера size. Функция возвращает количество записанных элементов. После записи информации в файл указатель смещается на n*size байт. Для контроля достижения конца файла есть функция feof: int feof(FILE *filename); Она возвращает ненулевое значение если достигнут конец файла. Для более точного усвоения материала предлагаю рассмотреть пару стандартных задач. Задача 1 Создать двоичный файл D:\\site\\noobs.dat и записать в него целое число n и n вещественных чисел. Решение:
Задача 2 Вывести на экран содержимого созданного в прошлой задаче двоичного файла D:\\game\\noobs.dat Решение:
Двоичный файл — последовательная структура данных, после открытия файла доступен первый байт, хранящийся в нем. Можно последовательно записывать или считывать данные из файла. Допустим, необходимо считать пятнадцатое число, а затем первое. С помощью последовательного доступа это можно сделать следующим способом:
Как видно, такое чтение чисел из файла, а затем повторное открытие файла — не самый удобный способ. Гораздо удобнее будет использовать функцию fseek перемещения указателя файла к заданному байту. int fseek(FILE *filename, long int offset, int origin); Функция устанавливает указатель текущий позиции файла F в соответствии со значением начала отсчета origin и смещения offset. Параметр offset равен количеству байтов, на которые будет смещен указатель файла относительно начала отсчета, заданного параметром origin. В качестве значения для параметра origin должно быть взято одно из следующих значений отсчета смещения offset, определенных в заголовке stdio.h:
Функция возвращает нулевое значение при успешном выполнение операции, ненулевое — при возникновении сбоя при выполнении смещения Функция fseek фактически реализует прямой доступ к любому значению в файле. Необходимо только знать месторасположение (номер байта) значения в файле. Рассмотрим использование прямого доступа в двоичных файлах на примере решения следующей задачи. Задача 3 В созданном раннее двоичном файле D:\\game\\noobs.dat, поменять местами наибольшее и наименьшее из вещественных чисел. Алгоритм решения задачи состоит из следующих этапов:
Ниже приведен текст программы решения задачи с комментариями.
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (645)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |