Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции-члены потока вывода делятся на три типа: эквивалентные манипуляторам, выполняющие неформатированные операции записи и изменяющие состояние потока другим образом и при этом не имеющие эквивалентных манипуляторов или операторов вставки. Для последовательного форматированного вывода можно использовать только операторы вставки и манипуляторы. Для двоичного дискового вывода с произвольным доступом следует использовать другие функции-члены с операторами вставки или без них.
Функция open для потоков вывода
Чтобы использовать выходной поток файлов (ofstream), необходимо связать этот поток с определенным файлом диска в конструкторе или open функции. При использовании open функции можно повторно использовать один и тот же объект потока с рядом файлов. В любом случае аргументы, описывающие файл, одни и те же.
При открытии файла, связанного с выходным потоком, обычно указывается open_mode флаг. Эти флаги можно объединить, которые определяются как перечислители в ios классе, с побитовой или (|) оператором. См ios_base::openmode . список перечислителей.
Три типовые ситуации для потока вывода используют параметры режима:
Создание файла. Если файл уже существует, старая версия удаляется.
ofstream ofile("FILENAME"); // Default is ios::out ofstream ofile("FILENAME", ios::out); // Equivalent to aboveДобавление записей к существующему файлу или его создание, если он не существует.
ofstream ofile("FILENAME", ios::app);Открытие двух файлов в одном и том же потоке, по одному за раз.
ofstream ofile(); ofile.open("FILE1", ios::in); // Do some output ofile.close(); // FILE1 closed ofile.open("FILE2", ios::in); // Do some more output ofile.close(); // FILE2 closed // When ofile goes out of scope it is destroyed.
Функция put.
Функция put записывает один символ в выходной поток. Следующие две конструкции по умолчанию одинаковы, но вторая зависит от аргументов формата потока:
cout.put('A');
// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply
Функция write.
Функция write записывает блок памяти в выходной поток файлов. Аргумент length указывает количество записанных байт. Следующий пример создает файловый поток вывода и записывает в него двоичное значение структуры Date:
// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
struct Date
{
int mo, da, yr;
};
int main( )
{
Date dt = { 6, 10, 92 };
ofstream tfile( "date.dat" , ios::binary );
tfile.write( (char *) &dt, sizeof dt );
}
Функция write не останавливается, когда она достигает символа NULL , поэтому записывается полная структура класса. Функция имеет два аргумента: указатель char и количество символов для записи. Обратите внимание на обязательный приведение char * к адресу объекта структуры.
Функции seekp и tellp
Файловый поток вывода хранит внутренний указатель на позицию следующей записи данных. Функция-член seekp устанавливает этот указатель, предоставляя тем самым вывод произвольного доступа в дисковый файл. Функция-член tellp возвращает позицию в файле. Примеры, которые используют входной поток, эквиваленты seekp и tellpсм. в разделе "Функции seekg и tellg функции".
Функция close для потоков вывода
Функция-член close закрывает файл диска, связанный с потоком выходных файлов. Для завершения всех операций вывода на диск файл должен быть закрыт. При необходимости ofstream деструктор закрывает файл, но можно использовать close функцию, если нужно открыть другой файл для одного объекта потока.
Деструктор выходного потока автоматически закрывает файл потока, только если конструктор или open функция-член открыли файл. Если вы передаете конструктор дескриптор файла для уже открытого файла или используете attach функцию-член, необходимо явно закрыть файл.
Функции обработки ошибок
Используйте эти функции-члены для проверки на ошибки при записи в поток:
| Функция | Возвращаемое значение |
|---|---|
bad |
Возвращается, если возникает true неустранимая ошибка. |
fail |
Возвращается, если возникает true неустранимая ошибка или ожидаемое условие, например ошибка преобразования, или если файл не найден. Обработка часто возобновляется после вызова clear с нулевым аргументом. |
good |
Возвращается true , если не удается установить условие ошибки (неустранимое или другое) и флаг конца файла не задан. |
eof |
Возвращает состояние true конца файла. |
clear |
Устанавливает внутреннее состояние ошибки. Если вызывается с аргументами по умолчанию, он очищает все биты ошибок. |
rdstate |
Возвращает текущее состояние ошибки. |
Оператор ! перегружен для выполнения той же функции, что fail и функция. Таким образом выражение:
if(!cout)...
эквивалентно правилу
if(cout.fail())...
Оператор void*() перегружается в противоположность оператору ! . Таким образом, выражение:
if(cout)...
эквивалентно:
if(!cout.fail())...
Оператор void*() не эквивалентен good , так как он не проверяет конец файла.