"Строковый ввод-вывод"

 

 Краткие теоретические сведения

 

 

Открытие и закрытие потока

     Прежде чем начать работать с файлом, его надо инициировать, т. е. открыть. При этом указатель файла связывается со структурой предопределенного типа 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);