Объектно-ориентированное программирование на C++


Файловые и строковые потоки


Одной из самых привлекательных возможностей библиотеки iostream является то, что она одинаково совершенно работает с различными источниками данных для ввода и вывода: клавиатурой и экраном, файлами и строками. Главное, что вы должны сделать, чтобы использовать строку или файл с библиотекой iostream,- это создать объект определенного типа.

Первостепенная задача при создании таких объектов - это организация буфера и связывание его с потоком.

При создании выходных файловых потоков вначале создается объект для буферизации типа filebuf, а затем этот объект связывается с новым объектом типа ostream для последующего вывода в этот новый объект.

filebuf mybuff; // создаем буферный объект

// увязывем этот буфер с файлом output для вывода

mybuff.open("output", ios::out);

ostream mycout(&mybuff); // новый потоковый объект

mycout <<12<<ends;

mybuff.close();

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

ifstream - для ввода,

ofstream - для вывода,

fstream - для ввода и вывода.

Например,

int i;

// сразу создается буферизованный потоковый объект, связанный // с файлом input

ifstream mycout("input");

mycin >> i;

Если в своей программе собираетесь использовать файловые потоки, то не забудьте внести в нее заголовочный файл fstream.h.

Если будите применять строковые потоки, то нужно подключить заголовочный файл strstrea.h.

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

char mybuff[128];



ostrstream mycout (mybuff, sizeof(mybuff));

mycout << 123 << ends;

При этом mybuff примет значение "123".

Аналогично для ввода,

int i;

char mybuff[128]= "123";

istrstream mycin (mybuff, sizeof(mybuff));

mycin >> i;

После этого i примет значение 123.

Для входных строковых потоков можно использовать символьный массив с завершающим нулем, либо указав точный размер.

[назад] [оглавление] [вперед]



Содержание раздела