Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие2013_09_28.doc
Скачиваний:
24
Добавлен:
20.05.2015
Размер:
2.72 Mб
Скачать

Открытие файловых потоков

Прежде чем начать работать с потоком, его следует открыть. Когда поток открывается для ввода-вывода, он связывается со структурой FILE, которая была рассмотрена выше. Для открытия применяется функция fopen().

Прототип:

FILE * fopen(char *_path, char *_mode);

Описание:

Параметр _path содержит указатель на массив символов, в котором содержится путь к файлу и его имя.

Параметр _mode определяет так называемый режим доступа к файлу; должен быть строковый и начинаться с одной из следующих последовательностей:

Режим

описание

начинает с..

r

rb

rt

открывает для чтения существующий файл

начала

w

wb

wt

открывает для записи (создает файл в случае его отсутствия). Удаляет содержимое и перезаписывает файл.

начала

a

ab

at

открывает для добавления (создает файл в случае его отсутствия)

конца

r+

rb+

rt+

r+b

r+t

открывает существующий файл для чтения и записи в любом месте файла; невозможна дозапись в конец файла

начала

w+

wb+

wt+

w+b

w+t

открывает для чтения и записи в любом месте файла; удаляет содержимое и перезаписывает файл; возможна дозапись в конец файла

начала

a+

ab+

at+

a+b

a+t

открывает для чтения и записи (добавляет в случае существования файла)

конца

Стандарт языка С различает два вида файлов — текстовые и двоичные . Значение «t» зарезервировано для текстового режима (принято по умолчанию); значение «b» зарезервировано для двоичного режима.

Текстовый файл  — файл, содержащий текст, разбитый на строки при помощи некоторого разделяющего символа окончания строки или последовательности (в Unix — одиночный символ перевода строки; в Microsoft Windows за символом перевода строки следует знак возврата каретки). При считывании байтов из текстового файла, символы конца строки обычно заменяются одним символом - переводом строки для упрощения обработки. При записи текстового файла одиночный символ перевода строки перед записью заменяется со специфичной для ОС последовательностью символов конца строки. Кроме того, как только из файла произойдет считывание символа с кодом 26(0x1Ah), считается, что достигнут конец файла (ситуация EOF).

Двоичный (бинарный) файл — файл, из которого байты считываются и выводятся в «сыром» виде, без какого-либо преобразования (подстановки). Все они рассматриваются как не имеющие какого-либо специального предназначения.

При открытом файле в режиме обновления ('+' в качестве второго или третьего символа аргумента обозначения режима) и ввод и вывод могут выполняться в одном потоке. Тем не менее, запись не может следовать за чтением без промежуточного вызова fflush() или функции позиционирования в файле (fseek(), fsetpos() или rewind()), а чтение не может следовать за записью без промежуточного вызова функции позиционирования в файле.

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

Возвращаемое значение:

Как указывалось выше, если эта операция оканчивается неудачей, fopen() возвращает NULL, в противном случае возвращается указатель на структуруFILE.

Указатель на поток fp должен быть объявлен в программе следующим образом:

FILE *fp;

Открытие потока можно осуществить так:

fp=fopen(имя_файла, режим);

Рекомендуется всегда проверять, успешно ли открыт поток, например:

if(fp==NULL)

{ puts(“ошибка”); exit(1); } //или perror(“имя_файла”);