Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловыми потоками.doc
Скачиваний:
2
Добавлен:
10.07.2015
Размер:
101.38 Кб
Скачать

2) Закрытие потока

Поток закрывается либо при завершении программы, либо явным образом с помощью функции fclose:

fclose(указатель на поток);

Перед закрытием потока информация из связанных с ним буферов выгружается на диск. Рекомендуется всегда явным образом закрывать потоки, открытые для записи, чтобы избежать потери данных.

3) Ввод/вывод в поток

Ввод/вывод в поток можно осуществлять различными способами:

- в виде последовательности байтов,

-в виде символов и строк

или с использованием форматных преобразований.

Ввод/вывод в поток осуществляется с помощью функции библиотеки stdio.h. Для каждого вида операций определен свой набор функций.

Функции ввода/вывода в текстовые файлы

Чтение символа из потока — getc, fgetc.

int getc(FILE *f);

int fgetc(FILE *f);

Функции возвращают очередной символ в форме int из потока f. Если символ не может быть прочитан, то возвращается значение EOF.

Запись символа в поток — putc, fputc.

int putc(int ch, FILE *f);

int fputc(int ch, FILE *f);

Функции записывают символ ch в поток f. При ошибке возвращается значение EOF, иначе — записанный символ.

Чтение строки из потока — fgets.

char *fgets(char *s, int n, FILE *f);

Функция читает не более n-1 байт из потока f в строку s, прекращая чтение при обнаружении символа новой строки или конца файла. Символ новой строки при чтении не отбрасывается, а помещается в конец строки. Прочитанная строка дополняется ограничителем строки ('\0'). При обнаружении ошибки или конца файла возвращается NULL. При успешном завершении чтения функция возвращает указатель на строку s.

Запись строки в поток — fputs.

int fputs(const char *s, FILE *f);

Функция записывает строку символов s в поток f. Символ конца строки в файл не записывается. При ошибке возвращает значение EOF, иначе — неотрицательное число.

Форматированный ввод из потока — fscanf.

Функция fscanf ( ) имеет следующий прототип:

int fscanf(FILE *f,const char *format[, address, ...]);

Она во всем аналогична функции scanf ( ), за исключением того, что форматированный ввод осуществляется не со стандартного устройства ввода, а из файлового потока f.

Форматированный вывод в поток — fprintf,

Функция fprintf ( ) имеет следующий прототип:

int fprintf(FILE *f, const char *format[, argument,...])

Она во всем аналогична функции printf (), но осуществляет форматированный вывод не на стандартное устройство вывода, а в файловый поток f.

Функция feof ( )

Функция feof ( ) является на самом деле макросом и позволяет осуществлять проверку на достижение символа конца файла при операциях ввода-вывода. Она имеет следующий прототип:

int feof(FILE *f);

Она возвращает ненулевое значение, если был обнаружен конец файла при последней операции ввода в поток f и 0, если конец файла еще не достигнут.

Рассмотрим пример файлового ввода и вывода:

#include <stdio.h>

int main ()

{

FILE *in, *out;

if ((in = fopen("d:\\1\\1.txt", "rt")) == NULL)

{

fprintf(stderr, "Cannot open input file.\n");

return 1;

}

if ((out = fopen("d:\\1\\2.txt", "wt")) == NULL)

{

fprintf(stderr, "Cannot open output file.\n");

return 1;

}

while (!feof(in))

fputc(fgetc(in), out);

fclose(in);

fclose(out);

fprintf(stderr, "The file is copied successfully.\n");

return 0;

}