Если программе необходимо работать с файлом, то следует включить в нее заголовочный файл fstream
(который в свою очередь включает iostream):
#include <fstream>
Если файл будет использоваться только для вывода, мы определяем объект класса ofstream. Например:
ofstream outfile( "copy.out", ios::base::out );
Передаваемые конструктору аргументы задают имя открываемого файла и режим открытия. Файл типа ofstream
может быть открыт либо – по умолчанию – в режиме вывода (ios_base::out), либо в режиме дозаписи (ios_base::app). Такое определение файла outfile2
эквивалентно приведенному выше:
// по умолчанию открывается в режиме вывода |
ofstream outfile2( "copy.out" );
Если в режиме вывода открывается существующий файл, то все хранившиеся в нем данные пропадают. Если же мы хотим не заменить, а добавить данные, то следует открывать файл в режиме дозаписи: тогда новые данные помещаются в конец. Если указанный файл не существует, то он создается в любом режиме.
Прежде чем пытаться прочитать из файла или записать в него, нужно проверить, что файл был успешно открыт:
if ( ! outfile ) { // открыть файл не удалось cerr << "не могу открыть "copy.out" для записи\n"; exit( -1 ); |
}
Класс ofstream
является производным от ostream. Все определенные в ostream
операции применимы и к ofstream. Например, инструкции
char ch = ' '; outFile.put( '1' ).put( ')' ).put( ch ); |
outFile << "1 + 1 = " << (1 + 1) << endl;
выводят в файл outFile
последовательность символов:
1) 1 + 1 = 2
Следующая программа читает из стандартного ввода символы и копирует их в стандартный вывод:
#include <fstream> int main() { // открыть файл copy.out для вывода ofstream outFile( "copy.out" ); if ( ! outFile ) { cerr << "Не могу открыть 'copy.out' для вывода\n"; return -1; } char ch; while ( cin.get( ch ) ) outFile.put( ch ); |