Листинг 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 | Бинарный режим |