Лабораторный практикум по основам языка C/С++ |
Тема 9.3. Работа с файлами средствами языка C++
В С++ для работы с потоками ввода вывода существует библиотека iostream.h
.
В этой библиотеке представлены следующие классы:
- Класс
streambuf
предоставляет память для буфера, а также методы для его наполнения, доступа к содержимому, сброса буфера и управления памятью буфера. - Класс
ios_base
предоставляет общие средства потока, такие как признак того, открыт ли поток для чтения, и является ли он бинарным или текстовым. - Класс
ios
базируется наios_base
и включает член-указатель на объект кассаstreamuf
. - Класс
ostream
наследуется отios
и предоставляет методы вывода. - Класс
istream
наследуется отios
и предоставляет методы ввода. - Класс
iostream
базируется на кассахistream
иostream
и потому наследует и методы вывода, и методы ввода.
Можно переопределить операцию вывода в поток следующим образом:
Далее представлена реализация класса.
Следует отметить тот факт, что дружественная функция, реализующая переопределение вывода в поток возвращает ссылку на объект класса ostream
это
необходимо для того, чтобы имелась возможность выводить нечто вроде следующего:
cout << "Время поездки : "<< trip << " (вторник) \n" ;
Если бы функция, переопределяющая операцию вывода в поток возвращала результат другого типа, то выполнение данной строки привело бы к ошибке. Пусть описание функции имеет вид:
void operator<< (ostream & os, cons t Time & t)
Тогда результатом выполнения строки
cout << trip;
будет безтиповое выражение, а значит попытка вывести в него что-то еще (следующий оператор <<
)
приведет к ошибке, ведь это уже не поток вывода.
Методы класса ostream
Класс ostream
содержит методы put(символ)
и write(строка)
для
вывода символов и строк соответственно. То есть, следующие две команды равносильны:
cout << "This is line of text";
cout.write("This is line of text");
Метод width(целое)
устанавливает для одной следующей операции вывода ширину вывода.
Таким образом этот метод может использоваться для организации вывода с фиксированным размером зоны отображения.
Метод fill(символ)
устанавливает символ-заполнитель. По умолчанию это пробел.
В отличие от width(целое)
изменение действует до тех пор, пока символ не будет изменен вновь.
Метод precision(целое)
устанавливает точность вывода чисел, то есть количество цифр после десятичной запятой.
Файловый поток вывода
Для того, чтобы выводить в файловый поток, необходимо выполнить следующее:
- Создать объект
ofstream
для управления выходным потоком. - Ассоциировать этот объект с конкретным файлом.
- Использовать объект тем же способом, как используется
cout
. Единственным отличием будет то, что вывод направляется в файл вместо экрана.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
std::ofstream file_out("myfile.txt");
file_out << "TEXT to file";
file_out.close();
return 0;
}