46.Открытие и закрытие файла.
Как уже указывалось ранее, каждая программа на С++ может использовать предопределенные потоки - стандартный вывод (cout), стандартный ввод (cin) и стандартные потоки ошибок (cerr, clog). Соответствующие объекты создаются системой автоматически. Чтобы работать с какими-либо устройствами или файлами надо создать потоки и привязать их к этим устройствам или файлам. Далее и будет рассматриваться этот механизм.
Для работы с файлами в С++ обычно создаются объекты следующих классов:
ifstream - для операций с входным дисковым файлом;
ofstream - для операций с выходным дисковым файлом;
fstream - для операций ввода и вывода с дисковым файлом.
Как указывалось ранее, эти классы являются производными соответственно от классов istream, ostream и iostream. Таким образом, они наследуют все описанные выше функциональные особенности своих базовых классов: перегруженные операции << и >> для встроенных типов, функции ввода-вывода, состояния потока, функции и флаги форматирования, манипуляторы.
Для каждого из трех классов файловых потоков предусмотрены конструкторы (всего по 4 конструктора, из которых рассмотрим по 2):
1) для создания объекта без открытия файла: ifsteram(), ofstream(), fstream();
2) для создания объекта с открытием файла:
ifstream(char *name,int omode=ios::in,int prot=filebuf::openprot);
ofstream(char *name,int omode=ios::out,int prot=filebuf::openprot);
fstream(char *name,int omode,int prot=filebuf::openprot);
где
name - имя файла;
omode - режимы открытия файла, определяемые как совокупность флагов:
ios::in - открытие для чтения;
ios::out - открытие для записи;
ios::ate - переход после открытия на конец файла (как для входных, так и выходных файлов);
ios::app - добавление записей к файлу;
ios::trunc - уничтожение содержимого, если файл существует (подразумевается, если задано ios::out и не заданы ни ios::ate, ни ios::app);
ios::nocreate - открываемый файл должен существовать;
ios::noreplace - открываемый файл не должен существовать;
ios::binary - открытие двоичного файла, иначе файл открывается в текстовом режиме.
Различие между текстовым и двоичным режимом: для текстовых файлов каждая пара символов "\r\n" (возврат каретки/перевод строки) при вводе преобразуется в единственный символ '\n', а при выводе наоборот. Для двоичных файлов преобразование не выполняется;
prot - определяет режим доступа для вновь создаваемых файлов. По умолчанию filebuf::openprot = S_IREAD | S_IWRITE, что позволяет читать и модифицировать файл.
Если файловый поток создается без открытия файла (первым из указанных конструкторов), то для последующего открытия файла и связи с ним объекта-потока можно использовать метод
open(char *name,int omode,int prot=filebuf::openprot).
Закрытие файлов выполняется автоматически в деструкторах классов - файловых потоков, но может быть выполнено и с помощью метода close().
- 99. Типы диаграмм языка uml
- 98. Унифицированный язык моделирования uml.
- 100. Диаграмма классов (class diagram).
- Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;
- Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;
- Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).
- 102. Компонентно-ориентированное проектирование
- Объектно-ориентированное проектирование на основе иерархии классов.
- 93. Гетерогенные контейнеры adt шаблонов
- Компонентные классы как основа систем визуального программирования.
- Построение каркасов приложений в среде современных систем программирования.
- Производные классы: наследование.
- Термин наследование и применение к классам и их характеристикам
- Создание объекта производного класса.
- Расширение производного класса.
- Создание объекта производного класса и вызов конструкторов
- Производные классы: полиморфизм.
- Множественное наследование в классе, порождённом от нескольких родительских классов-предков.
- Производные классы: полиморфная функция
- Иерархия классов
- 39.Простые манипуляторы для управления потоком
- Прядок вызова конструкторов в производных классах
- Виртуальные базовые классы.
- Порядок построения виртуальных базовых классов.
- 25. Указатель на абстрактный класс.
- 28.Технология объектно-ориентированного программирования.
- Интерфейс пользователя и абстрактный класс.
- 35.Предопределенные объекты-потоки.
- 29. Применение шаблонов классов и шаблонов функций.
- 30.Объекты класса и указатели на объекты класса.
- 31.Члены данных объекта и указатели на члены данных класса.
- 32.Указатели на функции-члены класса и указатели на статические члены данных.
- 36.Стандартный ввод-вывод.
- 34.Создание и организация взаимодействие потоков ввода-вывода.
- 37.Методы позиционирования потоков.
- 38.Способы управления форматом выходных данных.
- 42.Организация ввода-вывода для пользовательского типа
- 40.Параметризованные манипуляторы и форматирующие функции.
- 41.Состояния потока.
- 43.Методы опроса и установки состояния потока.
- 44.Обработка ошибок в потоке через определение и установку состояния потока.
- 45.Последовательность действий при создании ostream.
- 46.Открытие и закрытие файла.
- 47.Методы ввода-вывода.
- 13.Преобразование типов в производных классах.
- 14.Разрешение области видимости в производных классах
- 15.Виртуальные функции.
- 16.Нестатические компонентные функции класса.
- 17.Применение виртуальных функций.
- 18.Вызов виртуальных функций в конструкторе.
- 19.Вызов полиморфных функций базового класса.
- 20.Вызов полиморфных функций через базовые классы.
- 21.Вызов виртуальной функции через таблицу виртуальных методов.
- 22.Ограничения на использование виртуальных функций.
- 23.Чистая виртуальная функция.
- 24.Абстрактный класс и его использование.
- 80.Контейнер объектов List
- 82.Контейнеры шаблонов fds (Fundamental Data Structures).
- 76.Класс итераторов объектов: внешние и внутренние итераторы.
- 81.Контейнер объектов Stack
- 71.Контейнерные классы объектов: понятие контейнерного класса.
- 72.Итераторы в контейнерных классах объектов как друзья класса.
- 48.Бинарные файлы.
- 49.Чтение бинарных файлов.
- 50.Запись в бинарные файлы.
- 51.Инициализация потоков с помощью конструктора.
- 52.Текстовые файлы для ввода-вывода.
- 60.Дружественные шаблоны.
- 53.Форматирование в памяти с использованием потоков strstream.
- 54.Шаблон класса.
- 69.Механизм обработки исключений.
- 56.Создание шаблонного класса.
- 57.Шаблон функции, объявление.
- 61.Функциональное замыкание при разработке приложений.
- 58.Запись шаблона функции с несколькими обобщенными аргументами.
- 65.Исключение как статический объект.
- 64.Объектно-ориентированный подход к обработке исключений.
- 66.Генерации исключения.
- 85.Гомогенные и гетерогенные контейнеры шаблонов fds.
- 63.Использование конструкторов и деструкторов в роли «вступления» и «заключения».
- 67.Операторы throw и catch.
- 68.Обработчик исключений.
- 70.Понятие контролируемого блока при обработке исключений.
- 84.Способы хранения элементов в контейнерах шаблонов fds.
- 83.Вектора и списки в контейнере шаблонов.
- Стандартные контейнеры библиотеки stl
- 86.Fds контейнеры шаблонов векторов
- 62.Функциональное замыкание через наследование.
- 87.Fds контейнеры шаблонов списков
- 89.Способы реализации и префиксы имен adt-контейнеров шаблонов.
- 88.Контейнеры шаблонов adt (Abstract Data Types) и их классификация.
- 90.Типы adt-контейнеров шаблонов.
- 91.Массивы adt-контейнеров шаблонов.
- 92.Стеки adt-контейнеров шаблонов.
- 78.Контейнер объектов Array
- 74.Класс контейнеров объектов: разбиение контейнеров на группы.
- 77.Иерархия классов итераторов объектов
- 79.Контейнер объектов SortedArray
- 73.Библиотека контейнерного класса структур данных.