Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Ishodniki.Ru » Online книги » C++ Builder по шагам

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

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

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

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

  • Предыдущий шаг | Оглавление | Следующий шаг

    Рассылка новостей
    Рейтинги
    © 2007, Программирование Исходники.Ру