Прежде чем читать информацию из файла или записывать в него, нужно его открыть. В библиотеке <stdio.h>для этого имеется специальная функция:
FILE *fopen(char *fname, char *mode);
где *fname – имя файла, *mode – режим (табл. 8). Функция возвращает указатель (ссылку) на файл, который должен быть предварительно описан.
Таблица 8
Таблица режимов для открываемого файла
Режим
| Действие
|
“r”
| Открыть для чтения
|
“w”
| Создать для записи
|
“a”
| Открыть для добавления в существующий файл
|
“rb”
| Открыть двоичный файл для чтения
|
“wb”
| Создать двоичный файл для записи
|
“ab”
| Открыть двоичный файл для добавления
|
“r+”
| Открыть для чтения и записи
|
“w+”
| Создать для чтения и записи
|
“a+”
| Открыть для добавления или создать для чтения и записи
|
“r+b”
| Открыть двоичный файл для чтения и записи
|
“w+b”
| Создать двоичный файл для чтения и записи
|
“a+b”
| Открыть двоичный файл для добавления или создать для чтения и записи
|
“rt”
| Открыть текстовый файл для чтения
|
“wt”
| Создать текстовый файл для записи
|
“at”
| Открыть текстовый файл для добавления
|
“r+t”
| Открыть текстовый файл для чтения и записи
|
“w+t”
| Создать текстовый файл для чтения и записи
|
“a+t”
| Открыть текстовый файл для добавления или создать для чтения и записи
|
Например. FILE *fu;*fu–указатель на файловый тип
Пример. Объявим указатели на переменные файлового типа
FILE *uin, *uout; // (указатели на переменные файлового типа)
uin = fopen(“name1”, “r”); //открыть файл “name1” для чтения и далее
// идентифицировать как uin
uout = fopen(”name2”, “w”); //открывается для записи и связывается с
// идентификатором uout.
Если производится открытие несуществующего файла, то он создается.
Для открытия файла с именем test рекомендуется метод, который позволяет определить ошибку при открытии файла.
# include <stdio.h> // работа с файлами и константа NULL (FILEOPEN.C)
# include <stdlib.h> //для функции exit()
void main()
{
FILE *fp;
if ((fp=fopen("test","w"))==NULL)
{
puts("Не могу открыть файл\n"); // печать строки
exit(1);
}
puts("Файл открыт\n"); }
В библиотеке <stdio.h> определены также следующие функции работы с файлами ( fp – указатель на файл, возвращаемый функцией):
· fopen( ) – открытие файла;
· int fclose(FILE *fp) – закрытиефайла. Возвращает нуль, если операция выполнена успешно и иное значение в противном случае. Функция является рекомендуемой, поскольку файлы при нормальном завершении закрываются автоматически;
·int puts(int ch, FILE *fp) – записать символы типа int в поток. Возвращается записанный символ, если операция была успешной. Если произошла ошибка возвращается EOF;
· int gets(FILE *fp) – прочесть символ типа intиз потока. Возвращает EOF, если достигнут конец файла, или произошла ошибка при чтении файла;
· int feof(FILE *fp)– возвращает значение «истинно», если достигнут конец файла и нуль в противном случае;
Пример. while (!feof(fp)) {ch=getchar(fp);}
Выполняется ввод символа, пока не достигнут конец файла;
· int ferror(FILE *fp) – возвращает значение нуль, если обнаружена ошибка. Рекомендуется для обнаружения ошибок чтения и записи после каждой операции с файлами;
· int fprintf(FILE *fp, const, char *string, …)– форматированная запись в файл. Содержит указатель на файл и управляющую строку со списком;
· int fscanf(ILE *fp, const,char *string) –форматированное чтение из файла;
· unsign fread(void *buf, int bytes, int c, FILE *fp) – читает блок данных из потока (буферный обмен); buf – указатель на область памяти, откуда происходит обмен информации; с– количество единиц записи длиной bytes, которая будит считываться.
· unsign fwrite(void *buf, int bytes, int c, FILE *fp) – пишется блок данных в поток;
· int remove(char *filename)– уничтожается файл, возвращается нуль при успешной операции;
· unsign rewind( FILE *fp) – устанавливается указатель на начало файла;
· int fseck( FILE *fp, long numbyte, int orig) – установить указатель позиции файла в заданное место, numbyte – количество байт от точки отсчета (0,1,2), orig – макрос 0 – начало, 1– текущая позиция, 2 – конец;
· void abort() –– немедленное прекращение программы без закрытия файлов и без освобождения буферов, функция описана в библиотеке <stdlib.h>.