"r"
— Файл открывается только для чтения.
Попытка записи приводит к ошибке. Если
файл с указанным именем не существует,
fopen
возвращает NULL.
При успешном открытии файла указатель
чтения-записи устанавливается в 0
(начало файла).
"w"
— Файл открывается только для записи
с усечением. Попытка чтения из файла
приводит к ошибке функции чтения. Если
файл с указанной спецификацией не
существует, он создается в указанной
директории. Если файл нельзя создать
или он имеет атрибут "только для
чтения", fopen
возвращает NULL.
При успешном открытии файла указатель
чтения-записи устанавливается в 0.
После закрытия файл имеет новый размер,
определяемый текущим положением
указателя чтения-записи. Открытие и
немедленное закрытие существующего
файла приводит к усечению его размера
до нулевой длины.
"a"
— Файл открывается для дополнения.
Отличие от "w"
заключается в том, что при успешном
открытии файла указатель чтения-записи
устанавливается в конец файла. Запись
в файл происходит с сохранением имевшейся
до этого информации.
"r+"
— Файл открывается для чтения и записи.
Если файл с указанной спецификацией
не существует, fopen
возвращает NULL.
При успешном открытии файла указатель
чтения-записи устанавливается в 0.
Если в момент закрытия файла указатель
чтения-записи находится левее положения
конца файла в момент его открытия,
усечения файла не происходит.
"w+"
— Файл открывается для чтения и записи.
Если файл с указанной спецификацией
не существует, он создается. При успешном
открытии файла указатель чтения-записи
устанавливается в 0.
"a+"
— Файл открывается для чтения и
дополнения. Если файл с указанной
спецификацией не существует, он
создается. При успешном открытии файла
в этом режиме указатель чтения-записи
устанавливается в конец файла.
По
умолчанию файл открывается для работы
в текстовом режиме (в Windows перевод строки
задается парой символов СR–LF,
а в Unix-подобных система только одним
LF),
но можно указать режим явно, записав в
строке mode
после r,
w,
a, r+,
w+,
a+
либо 'b'
(двоичный), либо 't'
(текстовый). Например "rt","a+b".
Режимы открытия файлов
Так как операция открытия файла может закончиться неудачей и программа дальше работать не сможет, то необходимо (в обязательном порядке) дополнять вызов fopen проверкой возвращенного ею значения.
Пример
#include <stdio.h>
void main(){
FILE *fp;
fp=fopen("a:\\C\\USER\\file.c","r+");
if(fp == NULL) { puts(" Не удалось открыть файл!");exit(1);}
…}
б) Закрытие файла
После того, как работа с файлом закончена, его нужно закрыть. Это необходимо, чтобы освободить память, использованную для организации обмена с ним. Кроме того, у операционной системы (например, у DOS) могут быть ограничения на количество одновременно открытых программой файлов.
Закрытие файла выполняет функция
int fclose(FILE *fp);
Функция закрывает файловый поток, к которому относится указатель fp (полученный от fopen). Возвращает 0 в случае успешного закрытия. В противном случае (файл не был открыт или ошибка устройства) возвращает EOF.
При закрытии файла, открытого функцией fopen:
— освобождается память, занятая соответствующей структурной переменной FILE, выделенная при открытии файла;
— при записи содержимое буфера обмена переносится на диск;
— обновляется элемент директории, соответствующий файлу (размер, время создания и т. д.).