Функции ввода-вывода, работающие с файлами

Пример

Работа с файлами данных

Для программиста открытый файл представляется как последовательность данных — считываемых данных или записываемых данных. При открытии файла с ним связывается поток. Выводимая информация записывается в поток; считываемая информация берется из потока. Когда поток открывается для ввода-вывода, он связывается со структурой типа FILE, которая определена в stdio.h. Структура содержит разнообразную информацию о файле.


При открытии файла с помощью функции /open возвращается указатель на структуру типа FILE, который можно использовать для последующих операций с файлом.

 

#include <stdio.h>    
    /^прототип функции*/
    /^находится в файле*/
    /*stdio.h*/    
FILE *fopen (name, type);    
char *name;      
char *type;      

Функция /open открывает файл, имя которого задается аргументом пате, и связывает с ним поток для выполнения операций ввода-вывода данных. Параметр type — это указатель на строку символов, определяющих способ доступа к файлу. Возвращаемое значение функции — указатель на структуру типа FILE.

Значения аргумента type следующие:

• "г" — открыть файл для чтения (файл должен существовать);

• "w" — открыть пустой файл для записи; если файл существует, то его содержимое теряется;

• "а" — открыть файл для записи в конец (для добавления); файл создается, если он не существует;

• "г+" — открыть файл для чтения и записи (файл должен существовать);

• "w+" — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется;

• "а+" — открыть файл для чтения и дополнения, если файл не существует, то он создаётся.

Возвращаемое значение функции /open:

1) указатель на открытый поток;

2) значение NULL, если обнаружена ошибка.

Пример.Открытие существующего файла для чтения

main()

{

FILE *f; /* f - указатель на открытый поток */

char *а, *Ь; /* а и b - указатели на строки */

cL= cL • CLcLTL }

b="r";


f=fopen(a, b);

/* или более простой вариант: */ /* f= fopen("a.dat", "r"); */

Пример

 

f= fopen("a.dat" II у, II ) ;    
/* Так лучше не прогр аммировать,* /  
/* поскольку фун кция возвращает NULL, */
/* если файл не может быть открыт .*/  
/* Лучше сделать так: */    
if { ; (if = fopen( "a.dat","г")) != NULL )
} else        
  printf("\пОшибка открытия файла!") г

Функция /close закрывает поток или потоки, связанные с открытыми при помощи функции/ореи файлами. Закрываемый поток определяется аргументом/

 

#inc lude <stdio .h>
int fclose(f);  
FILE *f;    

Возвращаемое значение:

1) значение 0, если поток успешно закрыт;

2) EOF, если произошла ошибка.

fclose(f);

Функция feof определяет достигнут ли конец файла. Если конец достигнут, то операция чтения будет возвращать значение EOF до тех пор, пока поток не будет закрыт.

#include <stdio.h> int feof(f); FILE *f;


Возвращаемое значение:

1)0 — если конец файла не найден;

2) ненулевое значение, если достигнут конец файла.

1. Функция чтения символа из файла fgetc. Функция fgetc читает один символ из вводного потока/

 

#inc lude <stdio .h>
int fgetc(f);  
FILE *f;    

Возвращаемое значение:

1) код прочитанного символа;

2) EOF, если конец файла или ошибка.

2. Функция записи символа в файл fputc. Функция fputc записывает одиночный символ, имеющий код с, в поток / Это аналог функции putchar для работы с файлами.

 

#inc lude <stdio .h>
int fputs(c,f);  
int c;    
FILE *f;    

Возвращаемое значение:

1) код записанного символа;

2) EOF, если встретился конец файла или произошла ошибка.

Пример.Посимвольное копирование файла

 

 

 

 

#include <stdio.h>  
main () { FILE *in, *out;  
 
int c;  
if((in=fopen("in.dat","r"))! { if((out=fopen("out.dat", { while((c=fgetc(in)) =NULL)
"w"))!=NULL)
!=EOF)
fputc(c,out);  

fclose(out); fclose(in);

} else

printf("He могу открыть out.dat \n");

} else

printf("He могу открыть in.dat \n"); }

Функции fscanf и fprintf. Действия данных функций похоже на действия функций scan/ и printf, однако эти функции работают с файлами данных, и первый аргумент функций — это указатель на файл.

3. Функция fscanf читает данные из указанного потока /, выполняя форматные преобразования, и полученные значения записывает в переменные, адреса которых задаются параметрами argument.

 

#include <stdio.h>    
int fscanf(f, format string [,argument. .] ) ;
FILE *f;    
char ^format string;    

4. Функция fprintf выполняет формальные преобразования данных и печатает последовательность символов и значений в выводной поток/

 

#include <stdio.h>    
int fprintf(f, format string[, argument. .] ) ;
FILE *f;    
char ^format string;    

Пример.Дано два файла S.dat и Sl.dat. Необходимо считать число типа int из файла S.dat и записать его в файл Sl.dat.

 

main () г          
FILE *S, *S1;        
  /* S — указатель на файл S.dat */
  /* SI - указатель на файл SI .dat*/
  int age;          
  S=fopen( "S.dat", и -р и ) ;    
  Sl=fopen ("Sl.dat" и a") ;    

  fscanf(S, "%d", &age);  
  fclose (S);  
  fprintf(SI,"Пете - %d лет \n", age) ;
  fclose (SI);  
}    

Функции /gets и /puts предназначены для ввода-вывода строк, они являются аналогами функций gets и puts для работы с файлами.

5. Функция чтения строки символов из файла/gets. Функция /gets читает строку из входного потока f и помещает её в строку, адрес которой задается значением параметра s. Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки '\п', который включается в строку, или пока не наступит конец потока или не будет прочитано п-\ символов. Результат помещается в s и заканчивается нулевым символом '\0'. Функция возвращает адрес строки.

 

#incl ude <std io. h>      
char *fgets (s , n, f) ;      
char *s;          
int г v;          
FILE *f;          
  /* f - указатель на файл */

6. Функция записи строки символов в файл /puts. Функция /puts копирует строку s в поток f с текущей позиции. Завершающий нулевой символ не копируется.

 

#inc lude <stc lio h>
int fputs 3 (S, f) ,  
char *s;      
FILE *f;