Функция fopen() открывает для использования поток, связывает файл с данным потоком и затем возвращает указатель типа FILE на данный поток. Функция fopen() имеет прототип:
где filename указывает на строку, содержащую имя файла, а mode указывает на строку, содержащую желаемый режим открытия файла (таблица 1).
Таблица 1 – Режимы открытия файла
Режим
З н а ч е н и е
“r”
Открывает файл для чтения (по умолчанию текстовый )
“w”
Открывает файл для записи (по умолчанию текстовый )
“a”
Присоединяет к файлу (по умолчанию текстовый )
“rb”
Открывает двоичный файл для чтения
“wb”
Открывает двоичный файл для записи
“ab”
Присоединяет (открывает для добавления)
“r+”
Открывает файл для чтения/записи (по умолчанию. текстовый)
“w+”
Создает файл для чтения/записи (по умолчанию текстовый)
“a+”
Присоединяет или создает файл для чтения/записи (по умолчанию текстовый)
“r+b”
Открывает двоичный файл для чтения/записи
“w+b”
Создает двоичный файл для чтения/записи
“a+b”
Присоединяет или создает двоичный файл для чтения/записи
“rt”
Открывает текстовый файл для чтения
“wt”
Создает текстовый файл для записи
“at”
Присоединяет к текстовому файлу
“r+t”
Открывает текстовый файл для чтения
“w+t”
Создает текстовый файл для чтения/записи
“a+t”
Открывает или создает текстовый файл для чтения/записи
Примечание. При использовании “r” или “a” поток должен существовать.
Функция fopen() возвращает указатель базового типа FILE. Данный указатель идентифицирует файл и используется большинством функций файловой системы. Его никогда не следует изменять самостоятельно. Функция fopen() возвращает нулевой указатель (NULL), если файл не может быть открыт.
Если необходимо открыть файл с именем “a:\file1.dat” на запись, следует записать:
FILE *fp;
. . .
fp = fopen(“a:\file1.dat”, “w”);
или лучше
FILE *fp;
. . .
if ((fp = fopen(“a:\file1.dat”, “w”) = = NULL) {
puts(“Не могу открыть файл”)ж
exit(1); }
else puts(“Файл открыт для записи”);
Данный способ позволяет обнаружить ошибки при открытии файла, например, наличие защиты от записи на дискете или отсутствие свободного места.
Если fopen() используется для открытия файла на запись, то любой ранее существующий файл с указанным именем будет удален. Если его не существует, то он будет создан.
Для дозаписи информации в файл следует использовать режим “a”. Если файл не существует, то он будет создан.
Открытие файла на чтение требует наличия файла. Если файл не существует, то будет возвращена ошибка.
Если файл открыт для операции чтения/записи, то он не удаляется при наличии и, если его нет, то создается.