40. Файловый ВВод-вывод с применением потоков С++
Для осуществления операций с файлами предусмотрено три класса: ifstream, ofstream и fstream. Эти классы являются производными, соответственно, от классов istream, ostream и iostream. Поскольку эти классы являются производными от класса ios, классы файловых потоков наследуют все функциональные возможности своих родителей. Существует небольшое отличие между использованием предопределенных и файловых потоков. Файловый поток должен быть связан с файлом прежде, чем его можно будет использовать. С другой стороны, предопределенные потоки могут использоваться сразу после запуска программы, даже в конструкторах статических классов, которые выполняются даже раньше вызова функции main().Для создания файлового потока эти классы предусматривают следующие формы конструктора:
создать поток, не связывая его с файлом:
ifstream();
ofstream();
fstream();
создать поток, открыть файл и связать поток с файлом:
ifstream(const char *name, ios::openmode mode = ios::in) ;
ofstream(const char* name, ios::openmode mode=ios::out | ios::trunc);
fstream(const char * name, ios::openmode mode = ios::in | ios::out);
Чтобы открыть файл для ввода или вывода, можно использовать вторую форму нужного конструктора
fstream fs("FileName.dat"); или вначале создать поток с помощью первой формы конструктора, а затем открыть файл и связать поток с открытым файлом, вызвав функцию-член open().
Завершив операции ввода-вывода, необходимо закрыть файл, вызвав функцию-член close() с прототипом void close():
ofs.close();
Закрытие файла происходит автоматически при выходе потокового объекта из области существования, когда вызывается деструктор потока.