Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lect12

.pdf
Скачиваний:
7
Добавлен:
06.02.2016
Размер:
909.11 Кб
Скачать

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 языкаСи:

Открываемфайлвтребуемомрежиме

Работаемсфайлом

Закрываемфайл

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]