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

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

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

  • Шаблон basic_ifstream<> со специализациями ifstream и wifstream обеспечивает чтение файлов ("файловый входной поток данных").
  • Шаблон basic_ofstream<> со специализациями ofstream и wofstream обеспечивает запись файлов ("файловый выходной поток данных").
  • Шаблон basic_fstream<> со специализациями fstream и wfstream обеспечивает чтение и запись файлов.
  • Шаблон basic_filebuf<> со специализациями filebuf и wfilebuf используется только другими классами файловых потоков данных для
    выполнения фактических операций чтения и записи символов.

   
Иерархия классов файловых потоков данных, представленная на рисунке 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*), то при этом автоматически делается попытка открыть
файл для чтения и/или записи. Признак успеха этой попытки отражается в состоянии потока данных. Следовательно, после конструирования следует проверить состояние
потока данных.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий