Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Часть V. Полезные особенности. Глава 26. Использование потоков ввода-вывода                                   289. //откроем  бинарный  файл                         для записи; если он




voi d

{


 

//откроем  бинарный  файл                         для записи; если он

//существует, дописываем информацию в конец файла

;


продолжение

}

Функция-член bad () возвращает 1, если при работе с файловым объектом возник-

ли ошибки. В приведенном выше примере для проверки того, что файл открыт вильно, надо было написать следующее:

 

void fn )

{

 

//Если открыть файл не

{

<< "Ошибка при открытии файла return;

}

произведем запись в файл

туп << "У попа была собака\п";

}

 

Все попытки обратиться к объекту класса ofstream, который содержит ошибку, не вызовут никакого действия, пока флаг ошибки не будет сбро- шен с помощью функции ().

Деструктор класса                      автоматически закрывает файл. В предыдущем при-

мере         был закрыт при выходе из функции.

Класс ifstrea m работает для ввода почти так же,  как                             для вывода, что и демонстрирует приведенный ниже пример.

 

void fr. () (

// Откроем файл для чтения; не создавать

// файл, если он

 

if

{

cerr « могу найти файл return;

}

// Цикл считывания из    пока

// не будет достигнут его конец (eof) while

{

»           >>

обработаем полученную

Глава 26. Использование потоков ввода-вывода                                   289


Функция открывает файл                    конструируя объект                              Если та- кого файла не существует, этот объект не создается (ведь если вы ожидаете получить какую-то информацию из этого файла, бессмысленно создавать новый пустой файл). Если объект неправилен (например, файл не существовал), функция выводит сообще- ние об ошибке и завершается. В противном случае функция выполняет считывание пар  переменных                  и                                                             пока файл не закончится (bankstatement      true).

 

Попытка прочитать информацию с помощью объекта класса ifstrea m с установленным флагом ошибки приведет к немедленному возврату без считывания чего-либо. Для сброса флага ошибки используйте функцию clea r ().

Класс fstream похож на комбинацию классов ifstrea m и                 (кстати, он и наследуется от обоих этих классов). Объект класса fstream может быть создан как для ввода, так и для вывода.

 

Классы и strstrea m определены в заголовочном файле с   strstrea. h или

Операционная система MS DOS ограничивала имена файлов восьмью волами с трехбуквенным расширением; другими словами, использовала имена в формате 8.3 DOS. Это ограничение ушло в историю, однако многие компиляторы, включая Visual C++, придерживаются совместимости с име- нами типа 8.3 и используют имя strstrea.h . Компилятор GNU C++ ис- пользует полное имя

Классы  из                           позволяют использовать операции, определенные для файлов в классах fstream, для строк в памяти. Это очень похоже на функции

в С.

Приведенный ниже фрагмент кода использует поток ввода для разбора передавае- мой функции строки.

//Если это компилятор Visual C++ или подобный

 

имя типа 8.3...

 

противном случае...

 

полное имя

 

#endif

//parseString — демонстрирует классы строчных потоков,

//         считывая переданный буфер, как если бы

//         это был простой файл char*      pString)

 

istrstream inp(pString, 0) ;

 

accountNumber; float balance;

inp >> accountNumber >> balance; pBuffer = new char[12B];

 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 227; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.009 с.)
Главная | Случайная страница | Обратная связь