Для запису інформації до файлу використовують операцію, яка є аналогом операції cout <<:
fn << блок 1 << блок 2 << … << блок n;
Запишемо в файл деяку інформацію:
#include <iostream>
#include <fstream>
using namespace std;
int main( ) {
ofstream fn ( "test.txt", ios::out );
if ( !fn ) {
cout << "Error opening file\n";
exit( 1 );
}
fn << "Line 1" << endl << "Line 2";
fn.close();
}
Для читання з файлу використовують операцію, яка є аналогом операції cin >>:
fn >> блок 1 >> блок 2 >> … >> блок n;
Виведемо на екран зміст файлу, який був створений попередньою програмою:
#include <iostream>
#include <fstream>
using namespace std;
int main( ) {
char buf[ 20 ];
ifstream fn ( "test.txt", ios::in );
if ( !fn ) return 1;
while ( ! fn.eof() ) {
//fn >> buf; // Зчитати слово з файлу
fn.getline( buf, sizeof( buf ) );
cout << buf << endl;
}
fn.close();
}
Дані будуть читатися до тих пір, поки не буде досягнуто кінець файлу – в цьому випадку функція fn.eof() поверне нульове значення. Для читання з файлу можна використовувати оператор fn >> buf; який прочитає з файла слово і запише його в масив buf. Слово закінчується першим пробільним символом. Для того, щоб прочитати рядок символів, можна використовувати функцію fn.getline( buf, sizeof( buf ) ); Аргументами функції є адреса буфера, в якому необхідно зберегти прочитаний рядок, і розмір цього буфера.
При збереженні чисел в файлі їх зручно відділяти одне від одного одним чи декількома пробільними символами:
#include <iostream>
#include <fstream>
using namespace std;
int main( ) {
ofstream fout ( "test.txt", ios::out );
if ( !fout ) return 1;
for ( int i = 1; i <= 10; i++ )
fout << i << " " << double( i ) / ( i + 1)
<< ( i < 10 ? "\n" : "" );
fout.close();
int t;
double d;
ifstream fin ( "test.txt", ios::in );
if ( !fin ) return 1;
while ( ! fin.eof() ) {
fin >> t >> d;
cout << t << "\t" << d <<endl;
}
fin.close();
}
Так само можна читати рядки символів. Але необхідно пам’ятати, що операція >> буде повертати одне слово.
#include <iostream>
#include <fstream>
using namespace std;
int main( ) {
ofstream fout ( "test.txt", ios::out );
if ( !fout ) return 1;
fout << "One " << 1 << endl;
fout << "Two " << 2;
fout.close();
char c[ 10 ];
int t;
ifstream fin ( "test.txt", ios::in );
if ( !fin ) return 1;
while ( ! fin.eof() ) {
fin >> c >> t;
cout << c << "\t" << t <<endl;
}
fin.close();
}