Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Часть 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; Нарушение авторского права страницы