Программирование на C и C++

Онлайн справочник программиста на C и C++

fopen

FILE *fopen(const char *fname, const char *mode)

Прототип: 
Описание: 


Функция fopen() открывает файл, имя которого указано аргументом fname, и возвращает свя­занный с ним указатель. Тип операций, разрешенных над файлом, определяется аргументом mode. Разрешенные для mode значения показаны в таблице.

Таблица: Допустимые значения для mode
Режим Значение
"r" Создает файл для записи (по умолчанию файл открывается как текстовый).
"w" Создает файл для записи (по умолчанию файл открывается как текстовый).
"а" Дописывает информацию к концу файла (по умолчанию файл открывается как текстовый).
"rb" Открывает двоичный файл для чтения.
"wb" Создает двоичный файл для записи.
"ab" Дописывает информацию к концу двоичного файла.
"r+"  Открывает файл для чтения/записи (по умолчанию файл открывается как текстовый).
"w+" Создает файл для чтения/записи (по умолчанию файл открывается как текстовый).
"а+" Дописывает информацию к концу файла или создает файл для чтения/записи (по умолчанию открывается как текстовый файл).
"r+b" Открывает двоичный файл для чтения / записи.
"w+b" Создает файл для чтения / записи.
"а+b"   Дописывает информацию к концу файла или создает двоичный файл для чтения.
"rt" Открывает текстовый файл для чтения.
"wt" Открывает текстовый файл для записи.
"at" Дописывает информацию к концу текстового файла.
"r+t" Открывает текстовый файл для чтения/записи.
"w+t" Создает текстовый файл для чтения/записи.
"a+t" Открывает или создает текстовый файл для чтения/записи.

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

Если функции fopen() удалось открыть указанный файл, возвращается указатель на FILE. Если же файл не может быть открыт, возвращается NULL.

Как показано в таблице, файл может быть открыт либо в двоичном, либо в текстовом режиме. В текстовом режиме возврат каретки и последовательности перевода строки при вводе транслируется в символы «новая строка». При выводе — наоборот: символ новой строки транс­лируются в возврат каретки и перевод строки. Такого рода трансляция не производится при работе с двоичными файлами.

Если строка mode не задает ни b (для двоичных), ни t (для текстовых файлов), то тип открыва­емого файла определяется значением встроенной глобальной переменной _fmoae. По умолчанию _fmode принимает значение O_ТЕХТ, что означает текстовый режим. Она может быть установле­на и в O_BINARY, что означает двоичный режим. Эти макросы определены в fcntl.h.

Один из рекомендуемых методов открытия файла проиллюстрирован следующим фрагментом кода:
FILE *fp;
if ((fp = fopen("test", "w"))==NULL) {
printf("Cannot open file.\n");
exit(1);
}

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

Если при операции записи для открытия файла используется функция fopen(), то любой файл, уже имевший такое же имя, будет стерт и на его месте будет создан новый файл. Если файла с таким именем не существовало, он будет создан. Если необходимо дописать что-нибудь в конец файла, то необходимо использовать режим а. Если файл не существует, будет возвращена ошиб­ка. При открытии файла для операций чтения необходимо, чтобы он уже существовал. В против­ном случае будет возвращена ошибка. И наконец, если файл открывается для операций чтения/ записи, то он не стирается, если он уже существует, а если такого файла нет, он создается.

Пример: 
Этот фрагмент программы открывает файл с именем test для двоичных операций чтения/записи:
FILE *fp;
if((fp=fopen("test", "rb+"))==NULL) {
printf ("Cannot open file.\n");
exit(1);
}