Lect12
.pdf12. Потокиввода/выводаС++
«Объектно-ориентированное программирование»
доцентПриваловМ.В.
Донецк,ДонНТУ,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 языкаСи:
◦Открываемфайлвтребуемомрежиме
◦Работаемсфайлом
◦Закрываемфайл