
- •1. Понятие объектно-ориентированного программирования
- •2.Основные принципы ооп. Инкапсуляция
- •4. Конструкторы
- •Конструктор без параметров
- •Конструктор копирования
- •Деструкторы
- •Массивы объектов
- •Виртуальные методы
- •Использование классов функциональных объектов для настройки шаблонных классов
- •2. Стандартные потоки
- •3. Форматирование при вводе/выводе
- •4. Методы обмена с потоками
- •5. Ошибки потоков
- •6. Файловые потоки
- •7. Потоки и типы определяемые пользователем
- •Стандартная библиотека шаблонов stl (4 часа)
- •2. Контейнеры
- •3. Итераторы
6. Файловые потоки
Файл – именованная информация на внешнем носителе, т. е. логически файл – это конечное множество последовательных байтов, следовательно, устройства такие как принтер, клавиатура и монитор являются частным случаем файлов.
Файлы по способу доступа можно разделить на последовательные, чтение и запись в которых производятся с начала байт за байтом, и файлы с произвольным доступом, допускающие чтение и запись в указанную позицию.
Стандартная библиотека содержит три класса для работы с файлами: ifstream – класс входных файловых потоков; ofstream – класс выходных файловых потоков; fstream – класс двунаправленных файловых потоков.
Эти классы являются производными от классов istream, ostream и iostream соответственно, поэтому они наследуют перегруженные операции <<и >>, флаги форматирования, манипуляторы, методы, состояние потоков и т. д.
Использование файлов в программе предполагает следующие операции:
создание потока;
открытие потока и связывание его с файлом;
обмен (ввод/вывод);
уничтожение потока;
закрытие файла.
Каждый класс файловых потоков содержит конструкторы, с помощью которых можно создавать объекты этих классов различными способами.
Конструкторы без параметров создают объект соответствующего класса, не связывая его с файлом:
ifstream( );
ofstream( );
fstream( );
Конструкторы с параметрами создают объект соответствующего класса, от крывают файл с указанным именем и связывают файл с объектом:
ifstream(const char *name, int mode = ios::in);
ofstream(const char *name, int mode = ios::out | ios::trunc);
fstreamCconst char *name, int mode = ios::in | ios::out);
Вторым параметром является режим открытия файла. Вместо значения по умолчанию можно указать одно из следующих значений, определенных в классе ios.
ios::in – открыть файл для чтения;
ios::out – открыть файл для записи;
ios::ate – установить указатель на конец файла, читать нельзя, можно только записывать данные в конец файла;
ios::app – открыть файл для добавления;
ios::trunc – если файл существует, то создать новый;
ios::binary – открыть в двоичном режиме;
ios::nocreate – если файл не существует, выдать ошибку, новый файл не открывать;
ios::noreplace – если файл существует, выдать ошибку, существующий файл не открывать;
Открыть файл в программе можно с использованием либо конструкторов, либо метода open, имеющего такие же параметры, как и в соответствующем конструкторе
Примеры:
1.
filebuf fbuf;//создается объект типа filebuf
fbuf.open(“..\\f.dat”,ios::in);//связали fbuf с файлом и открыли для чтения
istream stream(&fbuf);//связали fbuf с потоком stream
2.
fstream stream; //конструктор без параметров
stream.open(“..\\f.dat”,ios::in);//открывается файл, который связывается через fbuf с потоком
3.
fstream stream(“..\\f.dat”,ios::in);//конструктор с параметрами, создает и откывает для чтения файл
После того как файловый поток открыт работать с ним можно также как и со стандартными потоками cin и cout. При чтении данных из входного файла надо контролировать был ли достигнут конец файла после очередной операции вывода. Это можно делать с помощью метода eof().
Если в процессе работы возникнет ошибочная ситуация, то потоковый объект принимает значение равное 0.
Когда программа покидает область видимости потокового объекта, то он уничтожается, при этом перестает существовать связь между потоковым объектом и физическим файлом, а сам файл закрывается. Если файл требуется закрыть раньше, то используется метод close().