Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка С++ BIKS-12 (Любченко).doc
Скачиваний:
39
Добавлен:
13.04.2015
Размер:
820.74 Кб
Скачать

6 Файлові потоки мови с

6.1 Мета роботи

6.2 Вказівки щодо організації самостійної роботи студентів

Поток является программной надстройкой над файлом, предоставляющей программисту дополнительный сервис. Схема работы с потоком такая же, как и с файлом: открыть поток, выполнить чтение и/или запись, закрыть поток.

Открывает поток вместе с ассоциированным файлом функция

FILE* fopen(const char *filename, const char *mode )

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

В строке режимов modeмогут находиться следующие символы:

r — открыть только для чтения.

w — создать для записи. Существующий файл будет перекрыт новым файлом.

a — открыть для дозаписи, или создать для записи, если файла нет

+ — операции будут выполняться с уже существующим файлом.

t — текстовый режим (обработка символов CR-LF).

b — двоичный режим (никакой обработки).

При отсутствии в строке символов b или t, режим определяется глобальной переменной _fmode, определенной в заголовочном файле fcntl.h.

FILE — это управляющая структура для потока, объявленная в stdio.h. Она не предназначена для прямого использования.

Помимо совместного открытия потока и файла (fopen), можно открыть поток и ассоциировать его с уже открытым файлом (fdopen), открыть файл и ассоциировать его с уже открытым потоком (freopen).

Закрывает поток и выгружает буферы функция

int fclose ( FILE *stream )

Функция возвращает 0 при успехе и константу EOF при ошибке.

Функция int fcloseall() закрывает все открытые потоки, кроме стандартных: stdin, stdout, stdprn, stderr и stdaux.

Ввод и вывод символов

Чтение символа из потока выполняется функцией

int fgetc(FILE *stream)

Запись символа в поток выполняется функцией

int fputc(int c, FILE *stream)

Обе функции возвращают код символа, а при ошибке возвращают EOF.

Чтение символа из стандартногопотока stdin выполняется функцией

int fgetchar(void)

Запись символа в стандартный поток stdout выполняется функцией

int fputchar(int c)

Пример.Скопировать файл xxx.bin в файл yyy.bin.

FILE *in = fopen ("c:\\xxx.bin", "rt");

FILE *out = fopen ("c:\\yyy.bin", "wt");

if (!in) return;

while (!feof(in))

fputc(fgetc(in), out);

fcloseall();

Ввод и вывод строк

Чтение строки из потока выполняется функцией

char *fgets(char *s, int n, FILE *stream)

Первый параметр указывает на буфер, принимающий строку, второй – задает размер буфера. Функция возвращает указатель на буфер или 0 при ошибке.

Чтение прекращается, когда достигнут конец строки или прочитано n-1 символов из файла. Строка в буфере замыкается символами '\n' и нулевым. Указатель файла перемещается за символы CR-LF.

Запись строки в поток выполняется функцией

char *fputs(char *s, FILE *stream)

Функция возвращает указатель на последний записанный символ или EOF при ошибке. Терминальный символ строки не копируется.

Пример.Скопировать текстовый файл xxx.txt в файл yyy.txt по строкам.

const int n = 100;

char buf [n];

FILE *in = fopen("c:\\xxx.txt","r");

FILE *out = fopen("c:\\yyy.txt","w");

if (!in) return;

while (!feof(in)) {

fgets(buf, n, in);

fputs(buf, out);

}

fcloseall();