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

fstream

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

  • ios_base::in
    Открытие для чтения.
  • ios_base::out
    Открытие для записи.
  • ios_base::app
    Автоматически переставляет указатель текущего символа потока в конец.
  • ios_base::binary
    Открытие файла в бинарном режиме.
  • ios_base::trunc
    Усекает поток после открытия.

Эти варианты сочетаются бинарным 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, инкапсулирующего оба последних класса. По большом счету все значимые события эти классы унаследовали от базовых.

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

Читайте также:
  • Класс TFileStream. Понятие потока VCL.
    Сначала я бы хотел бы дать некоторое вступление по поводу поточных классов VCL. Эти классы есть некоторое подобие альтернативы поточным классам C++. Как обычно в таких случаях с VCL, основной TStream класс никто впрямую не использует, от него можно только наследовать. Прямым потомком TStream явл...
  • Таблицы откликов [MESSAGE_MAP, MESSAGE_HANDLER]
    В VCL определены некоторые стандартные события для компонентов. Можно заметить, что эти события похожи на стандартные сообщения Windows. Однако не все сообщения Windows можно найти в VCL, и не все сообщения VCL реализованы в WinAPI. Например, в WinAPI нет сообщения, аналогичному OnClick, с другой...
  • TRegistry
    Чтобы легче было разбираться с Хелпом, скажу, что понятие Key означает не параметр, как можно было подумать, а раздел. Каждый раздел является подразделом главного раздела, которые мы рассмотрели в предыдущем Шаге. Чтобы понятней было, скажу, что иерархия напоминает файловую систему, где HKEY_* - ...
  • Класс списка строк TStringList и его связь с INI-файлами [TStringList, TIniFile]
    Класс TStringList является потомком класса TStrings, используемого в некоторых компонентах VCL, оперирующих текстом. Однако для использования вне объектов класс TStrings не подходит, поскольку не имеет собственного конструктора. Для этих целей используется TStringList, расширяющий функциональнос...
  • Списочные классы [TList, оператор dynamic_cast]
    Списочные классы C++ Builder хранят указатели типа void*, которые могут адресовать любые объекты. Для того, чтобы воспользоваться таким указателем, необходимо выполнить преобразование типа. Преобразования можно выполнить двумя способами - статическим в стиле обычного C++ и динамическим (расширен...