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

Файловый ввод

Основные функции управления потоковым вводом сосредоточены в классе istream. С каждым из объектов этого класса и его производных связан объект класса streambuf. Эти классы работают в связке: первый осуществляет форматирование, а второй управляет низкоуровневым буферизованным вводом. Функции класса istream, доступные его потомкам, перечислены в табл. 7.

Функция

Описание

ipfx

Вызывается перед операцией чтения для проверки наличия ошибок в потоке

isfx

Вызывается после каждой операции чтения

get

Извлекает из потока требуемое число символов; если указан символ-ограничитель, он не извлекается

getline

Извлекает из потока требуемое число символов; если указан символ-ограничитель, он извлекается, но не сохраняется в буфере

read

Извлекает из потока требуемое число байтов; применяется при работе с двоичными потоками

ignore

Выбрасывает из потока требуемое число символов вплоть до символа-ограничителя

peek

Возвращает текущий символ, сохраняя его в потоке

gcount 

Определяет число символов, извлеченных из потока во время последней операции чтения

eatwhite

Извлекает из потока ведущие пробельные символы; аналогичное действие выполняет манипулятор ws

putback

Возвращает в поток символы, извлеченные из него во время последней операции чтения

sync 

Синхронизирует внутренний буфер потока с внешним источником символьных данных

seekg

Перемещает маркер, обозначающий текущую позицию чтения, на требуемую позицию в потоке

tellg

Возвращает позицию маркера чтения

Класс ifstream является потомком класса istream, ориентированным на чтение данных из файлов. Его конструктор автоматически создает объект класса filebuf, управляющий низкоуровневой работой с файлом, включая поддержку буфера чтения. Функции класса ifstream перечислены в табл. 8.

Таблица 8. Функции класса ifstream

ФУНКЦИЯ

Описание

open

Открывает файл для чтения, связывая с ним объект класса filebuf

close

Закрывает файл

setbuf

Передает указанный символьный буфер в распоряжение объекта класса filebuf

setmode

Задает режим доступа к файлу: двоичный (константа filebuf:: binary) или текстовый (константа filebuf:: text)

attach

Связывает указанный открытый файл с объектом класса filebuf

rdbuf

Возвращает указатель на объект класса filebuf  

fd

Возвращает дескриптор файла

is_open

Проверяет, открыт ли файл, связанный с потоком

В следующей программе из файла читаются данные блоками по 80 символов, которые затем выводятся на экран:

// // ifstream.cpp     //В этой программе на языке C++ демонстрируется // использование класса ifstreamдля чтения данных из файла.  //

#include <fstream >

#define iCOLUMNS 80  

void main(void)

{   char cOneLine[iCOLUMNS];

 fstream ifMyInputStream("IFSTREAM.CPP");

while(ifMylnputStream)    {

ifMylnputStream.getline(cOneLine,    iCOLUMNS);

cout <<   '\n'   << cOneLine;     

}

 ifMylnputStream.close();

}

Конструктор клаccа ifstream создает объект ifMylnputStream, связывая с ним файл IFSTREAM.CPP, который открывается для чтения (по умолчанию в текстовом режиме). Этот объект можно использовать в условных операторах, проверяя его на равенство нулю, что означает достижение конца файла.

Функция getline(), унаследованная от класса istream, читает в массив cOneLineстроку текста длиной iCOLUMNS(80 символов). Ввод будет прекращен при обнаружении символа новой строки \n, конца файла или, если ни одно из этих событий не произошло, 79-го по счету символа (последним записывается символ \0).

После окончания вывода всего файла он закрывается командой close().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]