Функция fopen() открывает для использования поток, связывает файл с данным потоком и затем возвращает указатель FILE на данный поток. Чаще всего файл рассматривается как дисковый файл. Функция fopen() имеет следующий прототип:
FILE *fopen(const char *имя_файла, const char *режим);
где режим указывает на строку, содержащую желаемый режим открытия файла. Допустимые значения для режим в Borland С++ показаны в таблице. имя_файла должно быть строкой символов, предоставляющей корректное имя файла операционной системе, и может содержать указание пути.
Функция fopen() возвращает указатель базового типа FILE. Данный указатель идентифицирует файл и используется большинством функций файловой системы. Его никогда не следует изменять самостоятельно. Функция возвращает нулевой указатель, если файл не может быть открыт.
Как показывает таблица, файл может быть открыт или в текстовом, или в двоичном режиме. В текстовом режиме при вводе последовательность возврат каретки и перевод строки транслируется в символ новой строки. При выводе справедливо обратное: символ новой строки транслируется в возврат каретки и перевод строки. В двоичных файлах такого перевода не происходит. Когда в аргументе режима не указаны ни t, ни b, то статус файла текстовый/двоичный определяется значением глобальной переменной _fmode, определенной в Borland С++. По умолчанию fmode установлена в О_ТЕХТ, то есть устанавливается текстовый режим. Если установить _fmode в О_BINARY, то файлы будут открываться в двоичном режиме. (Эти макросы определены в fcntl.h.) Естественно, использование явно указанных t или b устраняет эффекты, связанные с переменной _fmode. Кроме этого, _fmode характерна только для продуктов Borland. Она не определена в системе ввода/вывода ANSI С.
Если необходимо открыть файл с именем test на запись, то следует написать:
fp = fopen ("test", "w") ;
где fp - это переменная типа FILE *. Тем не менее обычно можно увидеть следующее:
if((fp = fopen("test", "w"))==NULL) {
puts ("Cannot open file.");
exit (1);
}
Данный метод позволяет обнаружить ошибки при открытии файла, например, наличие защиты от записи или отсутствие свободного места на диске.
Если fopen() используется для открытия файла на запись, то любой ранее существующий файл с указанным именем будет удален. Если файла с указанным именем не существует, то он будет создан.
Если необходимо дописать информацию в конец файла, следует использовать режим а (добавления). Если файл не существует, то он будет создан.
Открытие файла на чтение требует наличия файла. Если файл не существует, то будет возвращена ошибка. Если файл открыт для операции чтения/записи, то он не удаляется при наличии, а если файл не существует, то он создается.
Режим |
Значение |
---|---|
"r" |
Открывает файл для чтения. (Открывает по умолчанию как текстовый файл.) |
"w" |
Создает файл для записи. (Открывает по умолчанию как текстовый файл.) |
"а" |
Присоединяет к файлу. (Открывает по умолчанию как текстовый файл.) |
"rb" |
Открывает двоичный файл для чтения. |
"wb" |
Открывает двоичный файл для записи. |
"ab" |
Присоединяет к двоичному файлу. |
"r+" |
Открывает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.) |
"w+" |
Создает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.) |
"a+" |
Присоединяет или создает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.) |
"r+b" |
Открывает двоичный файл для чтения/записи. |
"w+b" |
Создает двоичный файл для чтения/записи. |
"a+b" |
Присоединяет или создает двоичный файл для чтения/записи. |
"rt" |
Открывает текстовый файл для чтения. |
"wt" |
Создает текстовый файл для записи. |
"at" |
Присоединяет к текстовому файлу. |
"r+t" |
Открывает текстовый файл для чтения. |
"w+t" |
Создает текстовый файл для чтения/записи. |
"a+t" |
Открывает или создает текстовый файл для чтения/записи. |