698_____________________________________________Глава 12

dup и dup2, производящие операции непосредственно с дескрипторами, позволяю-
щие создавать дубли дескрипторов или, например, перенаправлять стандартные
потоки. Описания этих и иных функций вы найдете в главе 14 в разделе 14.12.4.

12.9.3 Файловый ввод/вывод с помощью потоков в стиле C++

12.9.3.1 Ввод и вывод потоков

В C++ определены три класса файлового ввода/вывода:

ifstream	входные файлы для чтения
ofstream	выходные файлы для записи
fstream	файлы для чтения и записи

При работе с файлами этих классов можно использовать ряд присущих им ме-
тодов, но, пожалуй, основным достоинством использования этих классов является
возможность применять очень удобные операции поместить в поток («) и взять
из потока (»).

Создаются объекты потоков, связанные с файлами, конструкторами соответст-
вующих классов. Например, операторы

ofstream outfile("Test.dat");

if(!outfile)

(
ShowMessage("Файл не удается создать");

return;

)

создают выходной поток outfile, связанный с файлом «Test.dat», создавая одно-
временно сам файл или, если он уже существует, урезая его длину до нуля. Если
по каким то причинам операция не может быть выполнена, значение outfile равно
О, и оператор if прерывает работу.

Аналогично может создаваться входной поток, связанный с файлом:

ifstream infile("Test.dat");

if(!infile)

(
ShowMessage("Файл не удается открыть");

return;

}

К созданным таким образом потокам можно применять операции поместить в
поток («) и взять из потока (»), подробно рассмотренные в главе 11 в разделе
11.7.14. Преимущество этих операций, работающих с текстовыми файлами, по
сравнению с рассмотренными в предыдущих разделах функциями является про-
стота использования и автоматическое распознавание типов данных. Рассмотрим,
например, следующий код:

int i = 1, j = 25, il, jl;

double a = 25e6, al;

char s[40], si [40];

strcpy(s,"Иванов") ;

// создание файла как выходного потока
ofstream outfile("Test.dat");

if(!outfiie)
(

ShowMessage("Файл не удается создать");

return;

}