Краткие теоретические сведения
Открытие и закрытие потока
Прежде чем начать работать с файлом, его надо инициировать, т. е. открыть. При этом указатель файла связывается со структурой предопределенного типа FILE, определение которой находится в библиотечном файле <stdio.h>. В структуре находится указатель на буфер, указатель на текущую позицию файла и т. п. При открытии потока, возвращается указатель на поток, т. е. на объект типа FILE.
#include <stdio.h>;
. . . . . . . .
FILE *fp;
. . . . . . . . . . ..
fp= fopen( ”t.txt”, ”r”);
где fopen(<имя_файла>,<режим_открытия>) - функция для инициации файла.
Существуют следующие режимы для открытия файла:
”w” - открыть файл для записи, если файл существует, то он стирается;
”r” - открыть файл для чтения;
”a” - открыть файл для добавления, если файл существует, то он не стирается и можно писать в конец файла;
”w+” - открыть файл для записи и исправления, если файл существует, то он стирается, а далее можно и читать , и писать, размеры файла можно увеличивать;
”r+” - открыть файл для чтения и записи, но увеличить размер файла нельзя;
”a+” - открыть файл для добавления, т. е. можно и читать и писать, в том числе и в конец файла.
Поток можно открыть в текстовом (t) или двоичном (b) режиме. По умолчанию - текстовый режим. В явном виде режим указывается следующим образом: ”r+b”или ”rb” - двоичный (бинарный) режим.
Пример:
if ((fp=fopen(”t.txt”, ”w”)==NULL)
{
perror(”\nошибка при открытии файла”); // выводит строку символов с сообщением // об ошибке
exit(0);
}
После работы с файлом, его надо закрыть
fclose(<указатель_на_поток>);
Для построчного ввода - вывода используются следующие функции:
1) char *fgets(char *s, int n, FILE *F), где
char *s - адрес, по которому размещаются считанные байты;
int n - количество считываемых байтов;
FILE *fp - указатель на файл, из которого производится считывание.
Прием символов заканчивается после передачи n байтов или при получении "\n".
Управляющий символ "\n" тоже передается в принимающую строку. В любом случае строка заканчивается "\0". При успешном завершении считывания, функция возвращает указатель на прочитанную строку, иначе возвращает NULL.
2) char *fputs(char *s, FILE *F), где
char *s - адрес, из которого берутся записываемые в файл байты;
FILE *fp - указатель на файл, в который производится запись.
Пример:
int MAXLINE=255; //максимальная длина строки
FILE *in, //исходный файл
*out; //принимающий файл
char buf[MAXLINE]; //строка, с помощью которой выполняется копирование
if ( ( in=fopen("имя_исходного_файла","rt") == NULL )
{
perror(”\nошибка при открытии исходного файла”); exit(666);
};
if ( ( out=fopen("имя_результирующего_файла","wt") == NULL )
{
perror(”\nошибка при открытии результирующего файла”); exit(666);
};
//копирование строк одного файла в другой
while (fgets (buf, MAXLINE, in)!=NULL)
fputs(buf,out);