Закрытие файла: fclose( )
В нашем примере показано, как нужно закрывать файл:
Аргумент функции является указателем на файл. Для более серьезной программы нужно смотреть, успешно ли закрыт файл. Функция fclose( ) возвращает значение 0, если файл закрыт успешно, и EOF в противном случае.
Текстовые файлы с буферизацией
Функции fopen( ) и fclose( ) работают с текстовыми файлами с " буферизацией ". Под буферизацией мы понимаем, что вводимые и выводимые данные запоминаются во временной области памяти, называемой буфером. Если буфер заполнился, содержимое его передается в блок, и процесс буферизации начинается снова. Одна из основных задач fclose( ) заключается в том, чтобы освободить любые частично заполненные буферы, если файл закрыт. Текстовым считается файл, в котором информация запоминается в виде символов в коде ASCII или аналогичном. Текстовый файл отличается от двоичного файла, который обычно используется для запоминания кодов машинного языка.
Ввод-вывод текстового файла: getc( ), putc( )
Две функции getc( ) и putc( ) работают аналогично функциям getchar( ) и putchar( ) (описанным в предыдущих лекциях). Разница заключается в том, что вы должны сообщить, какой файл следует использовать.
предназначена для получения символа от стандартного ввода, а
- для получения символа от файла, на который указывает in.
выводит символ на стандартный файл вывода.
предназначена для записи символа ch в файл, на который ссылается указатель t типа FILE.
Ввод-вывод файла: fprintf( ), fscanf( ), fgets( ), fputs( )
Все функции ввода-вывода, которые мы использовали в предыдущих лекциях, имеют аналоги для ввода-вывода файла. Основное отличие состоит в том, что нам нужно использовать указатель типа FILE, чтобы сообщить функциям с каким файлом им следует работать. Подобно getc( ) и putc( ) эти функции используются после функции fopen( ), открывающей файл, и передfclose( ), закрывающей его.
Функции fprintf( ) и fscanf( )
Эти функции ввода-вывода работают почти как printf( ) и scanf( ) (см. лекцию 4), но им нужен дополнительный аргумент для ссылки на сам файл. Он является первым в списке аргументов. Пример, иллюстрирующий обращение к этим функциям:
#include <stdio.h>
main( )
{
FILE *fi;
int age;
fi=fopen("File","r"); /* считывание */
fscanf(fi,"%d",&age); /* fi указывает на File */
fclose(fi);
fi=fopen("Data", "a"); /*дополнение*/
fprintf(fi,"Data is %d.\n",age);
/*fi указывает на Data*/
fclose(fi);
}
В отличие от getc( ) и putc( ) эти функции получают указатель типа FILE в качестве первого аргумента.
Функция fgets( )
Эта функция имеет три аргумента, в то время как gets( ) имеет лишь один. Пример ее использования:
/* Программа считывает файл строка за строкой */
#include <stdio.h>
#define MAX 80
main( )
{
FILE *f1;
char *string[MAX];
f1=fopen("File","r");
while (fgets(string,MAX,f1) != NULL)
puts(string);
}
Мы расположили вводимую информацию в символьном массиве string. Первый из трех аргументов функции fgets( ) являетсяуказателем на местоположение считываемой строки. Второй аргумент содержит предельную длину считываемой строки. Функция прекращает работу после считывания символа новой строки или после считывания символов общим числом MAX-1, в зависимости от того, что произойдет раньше. В любом случае нуль-символ ' \0 ' добавляется в самый конец строки. Третий аргумент указывает на файл, который будет читаться. Разница между gets( ) и fgets( ) заключается в том, что gets( ) заменяет символ новой строки на ' \0 ', в то время как fgets( ) сохраняет символ новой строки. Подобно gets( ) функция fgets( ) возвращает значение NULL, если встречает символ EOF . Это позволяет нам проверить, достигли ли мы конца файла.
Функция fputs( )
Эта функция похожа на функцию puts( ). Оператор
Код |
Положение в файле |
0 |
начало файла |
1 |
текущая позиция |
2 |
конец файла |
Передает строку " Строка " в файл, на который ссылается указатель fi типа FILE. Конечно, сначала нужно открыть файл при помощи функции fopen( ).
l является целым числом, которое устанавливается в EOF, если fputs( ) встречает EOF или ошибку. Эта функция не ставит завершающий символ ' \0 ' в конце копируемой строки. В отличии от puts функция fputs( ) не добавляет символ новой строки в ее вывод.
|