Шаг 48 - Файловый ввод-вывод. Продолжение.

Теперь перейдем к Станадартной Библиотеке Шаблонов. Там есть кое-какие классы, обеспечивающие i/o в стиле ООП. Напомню, для того, чтобы эти классы использовать, нужну включить <fstream> и дать директиву using namespace std. Правда, оговорюсь, что этот fstream - не единственный fstream (не очень хорошо звучит, но все равно :)). Есть еще <fstream.h>. Последний - стандартный поточный файл C++. Отличается он от STL класса не то чтобы очень сильно, но все-таки STL'овский посовременней будет. Все-таки рассмотрим fstream.

fstream

Инкапсулирует стандартный ввод-вывод. Я не буду рассматривать расширения этого класса под UNIX, ведь все равно программируем под Windows. Эти самые расширения касаются в основном прав доступа, по умолчанию 666 - allow all. В общем техника работы с этим классом такова. Сначала создается экземпляр, конструктором , первым параметром которого является имя файла, а вторым - режимы открытия файла. Как класс, произведенный от iostream, он инкапсулирует операторы включения и исключения "<<" и ">>". В общем-то с помощью них и производится работа с файлом. Режимы открытия класса - константы ios_base, имеют следующие значения:

Эти варианты сочетаются бинарным or, например ios_base::in|ios_base::out. Последнее открывает двух сторонний поток для ввода и вывода.

Думаю, глубоко уходить в дебри этого класса мы не будем, приведу пример его использования:

#pragma hdrstop
#include <fstream>
#include <conio.h>
#include <string.h>
using namespace std;
#define nl '\n'
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
fstream str("c:\\test.txt",ios_base::in|ios_base::out|ios_base::trunc);
for(int i=0;i<5;i++)
{
char s[100];
cin>>s;
str<<s<<'\n';
};
str.seekp(0);
while(!str.eof())
{
char s[100];
str.getline(s,100,'\n');
cout<<s<<'\n';
};
getch();
str.close();
return 0;
}

Вот так.

ifstream, ofstream

Не являются предками fstream, как можно было предположить, а являются производными basic_istream и basic_ostream. В общем-то разница небольшая, поскольку fstream является производным iostream, инкапсулирующего оба последних класса. По большом счету все значимые события эти классы унаследовали от базовых.

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 28.12.2001