Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема7.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
127 Кб
Скачать
☆

2.2. Указатель на файл, открытие файла, обработка ошибок, закрытие файла, изменение режима открытия.

Все функции, необходимые для работы с потоками, описаны в заголовочном файле stdio.h.

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

Для открытия используется функция fopen():

#include <stdio.h>

...

FILE *fp;

...

fp = fopen(<имя_файла>,<режим_открытия>)

...

Здесь аргументы <имя_файла> и <режим_открытия> - указатели на массивы символов, содержащих соответственно имя файла, связанного с потоком, и строку режимов открытия.

Существует шесть основных режимов открытия:

"w"

(write)

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

"r"

(read)

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

"a"

(append)

текстовый файл открывается или создается для добавления в конец файла новой порции информации.

"w+"

(write)

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

"r+"

(read)

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

"a+"

(append)

текстовый файл открывается или создается с возможностью последующей модификации. В отличие от режима "w+" можно открыть существующий файл без уничтожения его содержимого; в отличие от режима "r+" можно записывать в конец файла, увеличивая его размеры.

В случае использования двоичных файлов к строке режима открытия следует добавить символ "b" ("wb", "rb", "ab", "w+b", "r+b","a+b"). В этом случае все преобразования, связанные с обработкой концов строк, будут отсутствовать.

При открытии потока могут возникнуть ошибки, например, "указанный файл не найден", "диск заполнен", "диск защищен от записи" и ряд других. В случае ошибки функция fopen() возвращает указатель со значением NULL. Для вывода на экран сообщения об ошибке используется функция perror(), прототип которой описан в stdio.h:

void perror (const char *s);

Функция выводит строку символов, адресуемую указателем s, за которой размещается двоеточие, пробел и сообщение об ошибке. Содержимое и формат сообщения определяются используемой системой программирования. Текст сообщения об ошибке выбирается функцией на основании номера ошибки. Этот номер заносится в глобальную переменную с именем errno ( определенную в заголовочном файле errno.h) при реализации библиотечных функций ввода-вывода.

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

int fclose(<указатель_на_поток>);

Открытый файл можно открыть повторно (например, для изменения режима работы с ним) только после того, как файл будет закрыт с помощью функции fclose().

Для изменения режима открытия файла существует функция

FILE * freopen(<имя_файла>,<режим_открытия>,<указатель_на_поток>)

Типичный фрагмент программы, связанный с открытием файла выглядит следующим образом:

if ((fp = fopen("Example.txt","w")) == NULL)

{

perror("Error opening file Exampl.txt \n");

exit(0);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]