Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры теория 113019.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
380 Кб
Скачать
☆

62.Работа с файлами. Чтение и запись данных в файл. Посимвольный и построчный ввод-вывод

Все действия по чтению-записи данных делятся:

– операции посимвольного ввода-вывода;

– операции построчного ввода-вывода;

– операции ввода-вывода по блокам.

Просмотрев содержимое файла любым текстовым редактором видно,что данные располагаются точно так, как на экране, если воспользоваться функцией printf с такими же списками параметров.

Создание текстовых результирующих файлов обычно необходимо для оформления отчетов, различных документов, а также других текстовых материалов.

63.Работа с файлами. Чтение и запись данных в файл. Блоковый ввод-вывод

Все действия по чтению-записи данных делятся:

– операции посимвольного ввода-вывода;

– операции построчного ввода-вывода;

– операции ввода-вывода по блокам.

  1. Блоковый ввод-вывод.

Бинарные (двоичные) файлы обычно используются для организации баз данных, состоящих, как правило, из объектов структурного типа.

При чтении-записи бинарных файлов удобнее всего пользоваться функциями fread и fwrite, которые выполняют ввод-вывод данных блоками.

Такой способ обмена данными требует меньше времени.

Функция

unsigned fread (void *p, unsigned size, unsigned n, FILE *f);

выполняет считывание из файла f n блоков размером size байт каждый в область памяти, адрес которой p. В случае успеха функция возвращает количество считанных блоков. При возникновении ошибки или по достижении признака окончания файла – значение EOF (End Of File – признак окончания файла).

Обратное действие выполняет функция:

unsigned fwrite (void *p, unsigned size, unsigned n, FILE *f);

при вызове которой в файл f будет записано n блоков размером size байт каждый из области памяти, начиная с адреса p.

64.Работа с файлами. Чтение и запись данных в файл. Форматированный ввод-вывод

Все действия по чтению-записи данных в файл можно разделить на три группы: операции посимвольного ввода-вывода; операции построчного ввода-вывода; операции ввода-вывода по блокам. Рассмотрим основные функции, применяемые в каждой из указанных трех групп операций.

Форматированный ввод-вывод производится функциями:

int fscanf (FILE *f, char *формат,

список адресов объектов)

- считывает из файла f информацию

для объектов в соответствии с указанными форматами;

int fprintf (FILE *f, char *формат,

список объектов)

- записывает в файл f объекты, ука-

занные в списке в соответствии с форматами. Данные функции аналогичны функциям scanf и printf, только добавлен параметр – указатель на файл.

65. Работа с файлами. Указатель текущей позиции в файле, его перемещение к нужной позиции.

Каждый открытый файл, как уже отмечалось, имеет скрытый указатель на текущую позицию в нем. При открытии файла этот указатель устанавливается на начало данных, и все операции в файле будут производиться с данными, начинающимися в этой позиции.

При каждом выполнении функции чтения или записи указатель смещается на количество прочитанных или записанных байт, т.е. устанавливается после прочитанного или записанного блока данных в файле – это последовательный доступ к данным.

В языке Си/С++ можно установить указатель на некоторую заданную позицию в файле. Для этого используют стандартную функцию fseek, которая позволяет выполнить чтение или запись данных в произвольном порядке.

Декларация функции позиционирования следующая:

int fseek(FILE *f, long size, int code);

Значение параметра size задает количество байт, на которое необходимо сместить указатель в файле f, в направлении параметра code, который может принимать следующие значения:

– смещение от начала файла –

0

(SEEK_SET);

– смещение от текущей позиции –

1

(SEEK_CUR);

– смещение от конца файла –

2

(SEEK_END).

Таким образом, смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла.

В случае успеха функция возвращает нулевое значение, а в случае ошибки (например, попытка выхода за пределы файла) – единицу.

Доступ к файлу с использованием функции позиционирования (fseek) называют произвольным доступом.

Иногда нужно определить текущее положение в файле. Для этого используют функцию со следующей декларацией:

long ftell(FILE *f);

которая возвращает значение указателя на текущую позицию в файле или –1 в случае ошибки.