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