#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);
}
Зависимые функции
fclose() fread() fwrite() putc() getc()