Эти классы являются производными соответственно от istream, оstream и iostream. Таким образом, они наследуют все их функциональные особенности, в т.ч. перегруженные операции << и >> для встроенных типов.
24.2 Конструкторы файловых потоков
Для каждого из трех классов файловых потоков предусмотрено по четыре перегруженных конструктора. Рассмотрим два из них, применяемых наиболее часто. Это, в первую очередь, три пустых конструктора:
Они конструируют объекты, не открывая файла. Например, ifstream ifs; ofstream ofs; fstream f1,f2;
Три вторых конструктора позволяют конструировать объект, открыть файл и прикрепить объект к файлу. Их заголовки имеют вид:
ifstream(const char *name,int mode=ios ::in, int prot=filebuf ::openprot);
ofstream(const char *name, int omode=ios ::out, int prot=filebuf ::openprot);
fstream (const char*name, int omode, int prot=filebuf ::openprot);
24.3 Открытие файла
Чтобы открыть файл, можно использовать конструкторы ifstream, ofstream или fstream. Автоматически вызываются вторые конструкторы. Для ifstream и ofstream обязательными являются лишь имена файлов. Остальные два параметра берутся по умолчанию. При вызове fstream необходимо обязательно передать первые два параметра: имя файла и режим его работы.
Примеры.
ifstream ifs1("ish.dan");
ofstream of1("rezult.dan");
ofstream of2("rezult2.txt",ios::app);
Файл rezult2.txt используется для дозаписи в конец файла (append).
fstream fil1("file1.txt",ios::in);
file1.txt - для чтения.
fstream fil2("file2.dan",ios::out);
fstream fil3("file3.dan",ios::app);
Файлы file2.dan и file3.dan созданы соответственно для записи и для дозаписи в конец файла.
Открыть файл можно также с помощью функции -члена open() класса ios. Ее прототип имеет вид:
filebuf*open(const char*name,int mode, int prot=filebuf::openprot);
При ее вызове обязательными являются только первые два параметра: имя файла и режим его работы (доступа). Режимы доступа задаются перечисляемыми битовыми масками в классе ios.
еnum open_mode
{
in=0x01://open for reading
out=0x02://open for writing
ate=0x04://seek to end of file upon original open
app=0x08://append mode
trunc=0x10://trancate file if already exist
nocreate=0x20:// open fails if file doesn't exist
noreplace=0x40:// open fails if file alreadyexists
binary=0x80:// binary file
};
Примеры.
Предположим, с помощью пустого конструктора были созданы объекты:
fstream fin, fout;
fin.open("ish.dan", ios::in);
fout.open("rez.dan", ios::out);
Эти два файловых объекта открыты соответственно для чтения и для записи. Можно указывать несколько режимов доступа через вертикальную линию. Например:
fout.open("rez.dan",ios::out|ios::ate);
24.4 Закрытие файла
В классах файловых потоков имеется метод close, который опорожняет поток и закрывает закрепленный за потоком файл. Примеры:
fin.close( );
fout.close( );
Предполагается, что деструктор файлового объекта (или его базового класса) автоматически закрывает файл.
Примеры программ работы с файлами.
Пример 1 Табулирование функции. Исходные данные размещаются в файле ish.dan, а результаты будут заноситься в файл rez.dan.
#include <iostream.h>
#include <fstream.h>
#include <math.h>
#include <stdlib.h>
void main ( )
{
ifstream fin ("ist. dan");
if(fin)
{
cout<< "не открылся файл ish. dan" <<'\ n ';
exit(1);
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.