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

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

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

Читайте также:
  • Назначение события во время выполнения программы
    Вот процедура, назначающая событие компонента обработчику события другого (или того же самого) компонента, где во время выполнения программа само событие и его обработчик заданы в виде строки. В случае неверных имен события или его обработчика процедура возбуждает исключительную ситуацию. Вы може...
  • Работа в фоне
    Я пишу программу в Delphi, которая каждый час должна проверять размер файла. Это также предполагает, что в случае неактивности приложения оно должно работать сторожевым псом в фоновом режиме win 95 и NT. Как мне сделать это...?? Вот некоторый исходный код, который должен делать то, что вы хотите....
  • Организация задержки
    Организация задержки - все еще большая головная в Delphi. Я использую Delphi 1 и пытаюсь организовать задержку 2 ms с погрешностью -0 ms +1 ms. Может кто-то уже решал подобную проблему? Организация цикла не позволяет достичь такой точности. Стандартный таймерный компонент не позволяет работать с ...
  • Получение имени обработчика события
    Имеется возможность получить значение указателя на обработчик события, который вы можете сравнить по адресу с другими методами, чтобы вычислить тот, которому передается данное событие: procedure TForm1.Button3Click(Sender: TObject); var P: record case Integer of 1: (E: TNotifyEvent); 2: (P: Point...
  • Делегирование события
    ...я вижу что событие делегировано, но почему вы считаете, что это отход от ООП? Тем не менее, Delphi это использует при каждом определении обработчика события. Вот как поступить в вашей ситуации:  Определите тип процедуры, использующейся в качестве обработчика события. Допустим, ваш обработ...