Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiS.doc
Скачиваний:
88
Добавлен:
13.04.2015
Размер:
815.1 Кб
Скачать

18.5 Функции для открытия и закрытия файлов

Для уже сконструированного потока можно открыть файл методом потока open. Аргументы функции open такие же, как у второго конструктора fstream.

Метод close выгружает буфер и закрывает ассоциированный с потоком файл. Если при попытке закрыть файл происходит ошибка, устанавливается флаг failbit состояния потока. Деструктор файлового объекта автоматически закрывает файл.

18.6 Замена буфера потока

Метод setbuf ассоциирует с потоком указанный буфер.

void setbuf(

char* buf, // новый буфер

int len // размер буфера

)

Буфер следует назначать до открытия файла, а не после.

П р и м е р.

#include <fstream.h>

void main(){

char buf[100];

ifstream fs;

fs.setbuf(buf, sizeof(buf));

fs.open(“noname00.cpp”);

...

}

18.7 Текстовый и бинарный ввод-вывод

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

В текстовом режиме (когда флаг ios::binary не включен):

1) при вводе каждая пара символов \r\n преобразуется в единственный символ \n; 2) при выводе символ \n преобразуется в пару символов \r\n .

18.8 Бесформатный ввод и вывод

Бесформатный ввод и вывод обеспечивают максимальную скорость обмена информацией. Для него предназначены следующие функции.

Чтение блока символов:

istream& istream::read (unsigned char* buf, int len);

istream& istream::read (signed char* buf, int len);

len — максимальное число символов, которые должны быть извлечены из потока в буфер buf. Истинное количество извлеченных символов возвращает функция gcount( ).

Запись блока символов:

ostream& ostream::write(const unsigned char* buf, int n);

ostream& ostream::write(const signed char* buf, int n);

n — число символов, считая \0, кторые д.б. помещены в поток из буфера buf.

Извлечение одного символа из потока:

int istream::get ( );

istream& istream::get(unsigned char&);

istream& istream::get(signed char&);

Помещение одного символа в поток:

ostream& ostream::put(char);

Извлечение строки из потока:

istream& istream::get(signed char* buf, int n, char c = '\n');

istream& istream::get(unsigned char* buf, int n, char c = '\n');

Символы извлекаются и помещаются в буфер, пока не будет найден

символ-ограничитель, или не будет прочитано n символов, или не встретится конец файла. Ограничитель из потока не извлекается и в буфер не помещается.

istream& istream::getline(signed char* buf, int n , char c = '\n');

istream& istream::getline(unsigned char* buf, int n , char c = '\n');

То же, но ограничитель извлекается из потока (в буфер не заносится).

18.9. Часто применяемые функции потока

Пропуск символов при вводе.

istream& istream::ignore(int n = 1, int d = EOF) — извлекает символы из потока, пока не встретит ограничитель d или пока не извлечет n символов.

Проверка счетчика извлечения.

int istream::gcount( ) — возвращает число символов, извлеченных последней функцией бесформатного ввода.

З а м е ч а н и е. Форматируемый ввод может изменить это число, если неявно вызовет процедуру бесформатного ввода.

Заглядывание вперед.

int istream::peek( ) — возвращает значение очередного символа, не извлекая его из потока.

Возврат символа в поток.

istream& istream::putback( ) — возвращает символ во входной поток, как в стек, т.е. последний возвращенный символ будет извлечен первым

Позиционирование потока.

istream& istream::seekg(long pos);

istream& istream::seekg(long off, ios::seek_dir dir);

ostream& ostream::seekg(long pos);

ostream& ostream::seekg(long off, ios::seek_dir dir);

enum seek_dir { beg, cur, end };

Определение текущей позиции потока.

long istream::tellg( );

long ostream::tellp( );

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