Листинг 6.1. Файловый вывод

 

#include <iostream>

#include <iomanip>

#include <fstream>

#include <string>

 

using namespace std;

 

int main (void)

{

//поток вывода в файл file.txt;

ofstream fout("file.txt");

int ival;

cout << "enter integer value : ";

cin >> ival;

fout << setw(10) << setfill('0') << showpos << internal << ival << endl;

 

double dval;

cout << "enter double value : ";

cin >> dval;

fout << fixed << dval << endl;

 

string str;

cout << "enter string : ";

cin >> str;

fout << str << endl;

 

return 0;

}

 

Листинг 6.2. Файловый ввод.

 

#include <iostream>

#include <fstream>

#include <string>

 

using namespace std;

 

int main (void)

{

//поток ввода из файла file.txt;

ifstream fin("file.txt");

 

int ival;

double dval;

string str;

fin >> ival >> dval >> str;

 

cout << ival << endl << dval << endl << str << endl;

 

return 0;

}

 

6.2. Методы

Среди методов файлового ввода – вывода есть методы работающие не только с отдельными символами или массивами, но и оперирующие строками.

Таблица 6.1. Методы «ifstream».

Название Описание
gcount Подсчет символов, прочитанных за последнее обращение к потоку
get Посимвольное чтение
ignore Чтение и удаление строки, ограниченной разделителем или длинной
peek Чтение одного символа из потока без его удаления
putback Возврат последнего прочитанного символа обратно в поток
read Чтение символов из файла
seekg Установка позиции в файле
tellg Определение позиции в файле
eof Определение достижения конца файла
open Открытие файла, ассоциированного с потоком
close Закрытие файла, ассоциированного с потоком

Таблица 6.2. Методы «ofstream».

Название Описание
flush Очистка буфера и запись разделителя строк
put Посимвольная запись
seekp Установка позиции в файле
tellp Определение позиции в файле
write Запись в файл
open Открытие файла, ассоциированного с потоком
close Закрытие файла, ассоциированного с потоком

 

Листинг 6.3. Методы файлового ввода – вывода.

 

#include <iostream>

#include <fstream>

#include <string>

 

using namespace std;

 

int main (void)

{

string buf;

 

//поток вывода в файл file.txt;

ofstream fout( "file.txt" );

//считывание строки текста;

getline( cin, buf );

 

//запись считанного текста в файл file.txt;

fout << buf;

//закрытие файла, ассоциированного с потоком;

fout.close();

 

//поток ввода из файла file.txt;

ifstream fin( "file.txt" );

//чтение из файла file.txt и вывод на экран его содержимого;

while (!fin.eof())

cout << static_cast<char>(fin.get());

cout << endl;

//закрытие файла, ассоциированного с потоком;

fin.close();

return 0;

}

 

6.3. Флаги

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

Таблица 6.3. Флаги ошибок.

Название Описание
badbit Недопустимая операция
eofbit Конец файла
failbit Сбой операции
goodbit Отсутствие ошибок
hardfail Критическая ошибка

Таблица 6.4. Флаговые методы.

Название Описание
eof Статус флага eof
fail Статус флага badbit или failbit, или hardfail
bad Статус флага badbit или hardfail
good Статус флага goodbit
clear Снимает все флаги или устанавливает указанный

 

6.4. Двоичный режим

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

Таблица 6.5. Биты режимов.

Название Описание
in Чтение (предустановлен для «ifsteream»)
out Запись (предустановлен для «ofsteream»)
ate Чтения с конца файла
app Записи с конца файла
trunc Открытие с обрезанием файла до нулевой длинны, если он существует
nocreate Не создавать файл, если его не существует
noreplace Не открывать существующий файл без установки «ate» или «app»
binary Бинарный режим