#include <stdio.h> FILE *fopen(const char *fname, const char *mode);
Функция fopen() открывает файл, имя которого задается параметром fname, и возвращает указатель на поток, связанный с этим файлом. Типы операций, которые разрешено выполнять с файлом, определяются параметром mode. Возможные значения параметра mode приведены в таблице 13.1. Строка символов, которая будет играть роль имени реального файла, должна определять его имя, допустимое в данной операционной системе. Эта строка может включать спецификацию пути, если среда поддерживает такую возможность.
В версии C99 к параметрам fname и mode применен квалификатор restrict.
Если функция fopen() успешно открыла заданный файл, она возвращает указатель FILE. Если файл открыть не удается, возвращается нулевой указатель.
Режим | Назначение |
---|---|
"r" | Открывает текстовый файл для чтения |
"w" | Создает текстовый файл для записи |
"а" | Дописывает в текстовый файл |
"rb" | Открывает двоичный файл для чтения |
"wb" | Создает двоичный файл для записи |
"ab" | Дописывает в двоичный файл |
"r+" | Открывает текстовый файл для чтения и записи |
"w+" | Создает текстовый файл для чтения и записи |
"а+" | Открывает текстовый файл для чтения и записи |
"rb+" или "r+b" | Открывает двоичный файл для чтения и записи |
"wb+" или "w+b" | Создает двоичный файл для чтения и записи |
"ab+" или "а+b" | Открывает двоичный файл для чтения и записи |
Как видно из таблицы, файл можно открывать либо в текстовом, либо в двоичном режиме. В текстовом режиме выполняются преобразования некоторых символов. Например, символы новой строки преобразуются в комбинацию кодов возврата каретки (ASCII 13) и конца строки (ASCII 10). В двоичном режиме подобные преобразования не выполняются.
В следующем фрагменте программы иллюстрируется корректный способ открытия файла.
FILE *fp; if ((fp = fopen("test", "w"))==NULL) { printf("He удается открыть файл.\n"); exit(1); }
Благодаря такому методу перед записью в файл выявляется любая ошибка, возникающая при его открытии, например, использование защищенного от записи или заполненного диска.
Если с помощью функции fopen() открывается файл для вывода (записи), то любой уже существующий файл с заданным именем удаляется, а вместо него создается новый. Если файл с таким именем не существует, он будет создан. Чтобы открыть файл для выполнения операций чтения, нужно, чтобы этот файл уже существовал. В противном случае функция возвратит значение ошибки. Чтобы добавить данные в конец файла, необходимо использовать режим "а". Если окажется, что указанный файл не существует, он будет создан.
Осуществляя доступ к файлу, который открыт для чтения и записи, не следует сразу за операцией ввода выполнять операцию вывода, не прибегнув прежде к промежуточному вызову одной из следующих функций: fflush(), fseek(), fsetpos() или rewind(). Нельзя также сразу за операцией вывода выполнять операцию ввода, не прибегнув прежде к промежуточному вызову одной из перечисленных выше функций. Исключением является момент достижения конца файла во время операции ввода, т.e. в конце файла вывод может непосредственно следовать за вводом.
Максимальное количество файлов, которые могут быть открыты одновременно, ограничивается значением FOPEN_MAX, определенным в заголовке <stdio.h>.
Следующий фрагмент открывает файл с названием TEST для чтения-записи в двоичном режиме.
FILE *fp; if((fp=fopen("test", "rb+"))==NULL) { printf("He удается открыть файл.\n"); exit(1); }