Шаг 493.
Библиотека STL.
Ввод-вывод с использованием потоковых классов. Доступ к файлам

    На этом шаге мы перечислим потоковые классы, используемые для доступа к файлам.

    Потоки данных также используются для работы с файлами. В стандартную библиотеку C++ входят четыре основных шаблона, для которых определены стандартные специализации.

    Иерархия классов файловых потоков данных, представленная на рисунке 1, соответствует общей иерархии базовых классов потоков данных.


Рис.1. Иерархия классов файловых потоков данных

    Эти классы определяются в заголовочном файле <fstream> следующим образом:

namespace std {
    template <class charT,
              class traits = char_traits<charT> >
      class basic_ifstream;
    typedef basic_ifstream<char>    ifstream;
    typedef basic_ifstream<wchar_t> wifstream;

    template <class charT,
              class traits = char_traits<charT> >
      class basic_ofstream;
    typedef basic_ofstream<char>    ofstream;
    typedef basic_ofstream<wchar_t> wofstream;

    template <class charT,
              class traits = char_traits<charT> >
      class basic_fstream;
    typedef basic_fstream<char>    fstream;
    typedef basic_fstream<wchar_t> wfstream;

    template <class charT,
              class traits = char_traits<charT> >
      class basic_filebuf;
    typedef basic_filebuf<char>    filebuf;
    typedef basic_filebuf<wchar_t> wfilebuf;
}

    Основным достоинством потоковых классов для работы с файлами является автоматизация выполняемых операций. Файлы автоматически открываются во время конструирования и закрываются при уничтожении объекта. Естественно, что эта возможность имеется благодаря соответствующему определению конструкторов и деструкторов.

    Одно важное обстоятельство, относящееся к потокам данных с поддержкой и чтения и записи, - такие потоки не должны допускать произвольного переключения между чтением и записью! Чтобы после начала чтения из файла переключиться на запись (или наоборот), необходимо выполнить операцию позиционирования (возможно, с сохранением текущей позиции). Единственное исключение из этого правила относится к чтению с выходом за конец файла; в этой ситуации можно немедленно переходить к записи символов. Нарушение этого ограничения приводит к нежелательным побочным эффектам.

    Если при конструировании файлового потока данных в аргументе передается С-строка (тип char*), то при этом автоматически делается попытка открыть файл для чтения и/или записи. Признак успеха этой попытки отражается в состоянии потока данных. Следовательно, после конструирования следует проверить состояние потока данных.

    На следующем шаге мы рассмотрим программу, иллюстрирующую использование рассмотренных конструкций.




Предыдущий шаг Содержание Следующий шаг