
Lect12
.pdf
12. Потокиввода/выводаС++
«Объектно-ориентированное программирование»
доцентПриваловМ.В.
Донецк,ДонНТУ,2011

Проверкасостоянияпотока
Операцииввода-вывода– этооперации, которыезависятотсостояниявнешних ресурсов(состояниеносителей,наличие директорий,файлов,правадоступа, блокировкиит.п.).
Ввод-выводможетдостаточночасто заканчиваться неудачей.
Операцииввода-выводажелательно ВСЕГДАпроверятьнауспешность завершения.

Проверкасостоянияпотока
Флаги состояния потока
enum io_state {
goodbit = 0x00, eofbit = 0x01, failbit = 0x02, badbit = 0x04, hardfail = 0x10
};

Проверкасостоянияпотока
Методыпроверкисостоянияпотока
int rdstate();
void clear(int i=0);
int good();
int eof();
int fail();
int bad();
Помимометодовможноиспользоватьсамобъектпотока

Примерыпроверокобъекта
//1) Проверка результата ввода if (cin >> x) return;
//2) Проверка потока вывода
if (!cout)
cerr << "Ошибка вывода!";

Примерыпроверокфлагови манипуляцийнадними
//Проверить, установлен ли flag: if (strm.rdstate() & ios::flag) {
}
do_something();
//Сбросить flag strm.clear(strm.rdstate() &
~ios::flag);
//Установить flag strm.clear(strm.rdstate() |
ios::flag);

Примерыпроверокфлагови манипуляцийнадними
//Установить flag
//и сбросить остальные: strm.clear(ios::flag);
//Сбросить все флаги strm.clear();

Примерыпроверокфлагови
манипуляцийнадними
#include <iostream> #include <fstream> using namespace std; int main() {
ifstream f1("file_from"); if (!f1) {
cerr << "Не удалось открыть файл file_from" << endl;
}
ofstream f2("file_to"); if (!f2) {
cerr << "Не удалось открыть файл file_to" << endl;
}
}

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

Классыфайловыхпотоков
ifstream – файловыйпотокввода
ofstream – файловыйпотоквывода
fstream – универсальныйфайловый поток
Работасфайламиимееттуже идеологию,чтоивstdio.h языкаСи:
◦Открываемфайлвтребуемомрежиме
◦Работаемсфайлом
◦Закрываемфайл