Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка по С++.doc
Скачиваний:
7
Добавлен:
28.08.2019
Размер:
250.88 Кб
Скачать

8.2. Потоковый файловый ввод-вывод

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

Связующим звеном между файлом и потоком в Си является указатель на файл. Указатель на файл — это указатель на структуру типа FILE, которая определена в файле stdio.h.

Объявить указатель на файл можно следующим образом:

FILE *fil;

Рассмотрим работы основных функций файлового ввода-вывода библиотеки stdio.h.

1. FILE *fopen(char *filename, char *mode). Открывает поток и связывает файл с потоком. Возвращает указатель на файл. Если файл не отктыт, то возвращает нулевое значение (NULL). Параметр mode — это строка, содержащая режим открытия файла. Перечислим возможные режимы открытия файла.

"r"

Открыть для чтения

"w"

Создать для записи

"a"

Открыть для добавления

"r+"

Открыть для чтения и записи

"w+"

Создать для чтения и записи

"a+"

Открыть для добавления или создать для чтения или записи

2. int putc(int c, FILE *f). Записать символ в поток. При успешном окончании возвращает записанный символ. При возникновении ошибки возвращает признак конца файла EOF.

3. int getc(FILE *f). Считывает символ из потока. Возвращает EOF если конец файла или произошла ошибка при чтении из файла.

Пример.

char c;

FILE *fil;

if ((fil=fopen("text.txt","rt"))==0)

{printf("Файл не открыт\n");

exit(0);}

c=getc(fil);

while(c!=EOF) {

c=getc(fil);

//Обработка считанных данных

};

4. int feof(FILE *f). Возвращает "1" если достигнут конец файла.

Пример.

while (!feof(fil)) {c=getc(fil);}

5. char *fgets(char *s, int n, FILE *f). Ввод строки из n-1 символа. Ввод заканчивается если прочитано меньше n-1 символов или в момент ввода символа новой строки. В конце файла возвращает нулевое значение.

char c[100];

while (!feof(fil))

if (fgets(c,90,fil)!=0)

printf("%s",c);

6. int fputs(char *s, FILE *f). Вывод строки, ограниченной символом ‘\0’, в файл. При ошибках функция возвращает EOF.

7. int fprintf(FILE *f, форматная строка, список переменных). Работает аналогично функции printf, но вывод осуществляется в файл.

8. int fscanf(FILE *f, форматная строка, список переменных). Работает аналогично функции scanf, но ввод осуществляется из файла.

9. int fclose(FILE *f). Закрыть файл.

10. int fseek(FILE *f, long offset, long begin). Позиционирование в файле.

Параметр offset задает смещение по файлу в прямом (положительное) или в обратном (отрицательное) направлениях.

Параметр begin определяет начало отсчета. Возможные значения данного параметра определены константами, объявленными в файле stdio.h:

SEEK_SET (равна 0) — начало файла;

SEEK_CUR (равна 1) — текущая позиция;

SEEK_END (равна 2) — конец файла.

Примеры:

fseek(fil1, 250L, SEEK_CUR);

fseek(fil2, 0L, SEEK_SET);

Символ L после числа обозначает тип параметра long.

11. void rewind(FILE *). Установить указатель текущей позиции в потоке на начало потока.