Программирование >>  Операторы преобразования типа 

1 ... 192 193 194 [ 195 ] 196 197 198 ... 239


Доступ к файлам

Потоки данных чакже исиользуются для работы с файлами. В стандартную библиотеку С++ входят четыре основных шаблона, для которых определены стандартные специализации.

О Шаблон basicjfstreamo со специализациями ifstream и wifstream обеспечивает чтение файлов ( файловый входной поток данных ).

О Шаблон basic ofstream<> со специализациями ofstream и wofstream обеспечивает запись файлов ( файловый выходной ноток данных ).

О Шаблон basic fstream<> со специализациями fstream и wfstream обеспечивает чтение и запись файлов.

О Шаблон basic filebuf<> со специализациями filebuf и wfilebuf используется только другими классами файловых потоков данных для выполпепия фактических операций чтения и записи символов.

Иерархия классов файловых потоков данных, представ ленная на рис. 13.2, соответствует общей иерархии базовых классов потоков данных.

Эти классы определяются в заголовочном файле <f5tream> следующим образом:

namespace std {

template <class charT,

class traits = char traits<charT> > class basic 1fstream; typedef basic 1fstream<char> ifstream: typedef bas1c 1fstream<wchar t> wifstream;

template <clas5 charT.

class traits = char traits<charT> > class bas1c ofstream; typedef bas1c ofstream<char> ofstream: typedef bas1c ofstream<wchar t> wofstream;

template <class charT.

class traits = char tra1ts<charT> > class bas1c fstream: typedef bas1c fstreani<char> fstream; typedef bas1c fstream<wchar t> wfstream;

template <class charT.

class traits = char tra1t5<charT> >

Например, следующая команда преобразует символ новой строки в кодировку, используемую потоком данных:

strm.widen(\n)

За дополнительной информацией о локальных контекстах и интернационализации обращайтесь к главе 14.



class bas1c filebuf; typedef baslc filebuf<char> filebuf: typedef bas1c filebuf<wchar t> wfllebuf:

ios

base

basic

ios /

ioso

wios

ba e i c e t re ambu f ic>

streambuf / wstreambuf


{virtual)


basic £ ilebuf<>

filebuf / wfilebuf

basic istream<>

istream / wistream


basic ostreazn<>

ostream / wostream


baa i c i os treazn<>

iostream / wiostream

ba e ic if a tr eazn<>

ifstream / wifstream

bae1c ofetraam<>

ofstream / wofstream

baei c fetra am<>

fstream / wfstream

Рис. 13.2. Иерархия классов файловых потоков данных

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

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

Это ограничение было унаследовано от С Тем не менее оно с большой вероятностью будет поддерживаться и будущими реализациями стандартной библиотеки С++.



в этой ситуации можно немедленно переходить к записи символов. Нарушение этого ограничения приводит к нежелательным побочным эффектам.

Если при конструировании файлового потока данных в аргументе передается С-строка (тип char*), то при этом автоматически делается попытка открыть файл для чтения и/или записи. Признак успеха этой попытки отражается в состоянии потока данных. Следовательно, после конструирования следует проверить состояние потока дагп1ых.

Следуюш программа открывает файл charset.out и записывает в него текущий набор символов (все символы в интервале 32-255):

io/charset.cpp

#include <string> Строки

#include <iostreani> Ввод-вывод

#include <fstream> Файловый ввод-вывод

#include <iomanip> setwC)

#1nclude <cstdlib> exitC)

using namespace std;

Опережающие объявления

void wrIteCharsetToFlle Cconst string& filename): void outputFlle Cconst string filename):

1nt main C) {

writeCharsetToFl1e( charset.out ): outputFI1eC cha rset.out );

void WrIteCharsetToFlle (const str1ng& filename) {

Открытие выходного файла ofstream f11e(f11ename.c str());

Файл открыт? if (! file) {

NO. abort program

cerr cant open output file \ filename \

endl; exitCEXn FAILURE):

Вывод текущего набора символов for (int 1=32: 1<256; 1++) {

file value: setw(3) 1

char; static cast<char>(1) end1;

} Автоматическое закрытие файла void outputFlle (const str1ng& filename)



1 ... 192 193 194 [ 195 ] 196 197 198 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика