На этом шаге мы рассмотрим основные приемы работы с этим классом.
Члены этого класса позволяют открыть файл, записать в него данные, поместить файловый указатель (указатель, показывающий, в каком месте файла мы находимся), прочитать данные. Этот класс имеет такие основные функции (методы):
Параметры функции open():
Способ открытия файла задается значением перечислимой переменной:
enum open_mode {app, binary, in, out, trunc, ate};
Эта переменная определена в базовом классе ios, поэтому обращение к перечислимым значениям в классе fstream, с экземпляром которого мы работаем должно идти с указанием класса-родителя: ios::app, ios::binary и т. д.
Назначение способов открытия файла:
При задании режимов открытия файла можно применять оператор логического ИЛИ (|), чтобы составлять необходимое сочетание режимов открытия.
Ниже приведен пример программы работы с классом fstream, peзультат работы показан на рисунке 1.
// 90_1.cpp: главный файл проекта. #include "stdafx.h" #include <fstream> #include <iostream> #include <conio.h> #include <stdio.h> #include <clocale> //обязательно для функции setlocale() using namespace System; using namespace std; // Используется стандартное пространство имен. void main() { setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами //для корректного вывода кириллицы // Создание двунаправленного (чтение/запись в // одном и том же файле) объекта (экземпляра) fstream inout; inout.open("fstream.out", ios::in | ios::out | ios::trunc); // вывод в файл inout << "Это первая история" << endl; inout << "Это вторая история" << endl; inout << "Это третья история" << endl; char p[100]; // установка указателя файла (позиционирование) в его начало inout.seekg(0); // чтение 1-й строки (длиной не более 100 символов) inout.getline(p,100); // вывод 1-й строки на экран (stdout) cout << endl << "1-я строка: " << endl; cout << p; // запоминание текущей позиции в файле после 1-го вывода fstream::pos_type pos = inout.tellg(); // чтение 2-й строки из файла inout.getline(p,100); // вывод 2-й строки на экран (stdout) cout << endl << "2-я строка: " << endl; cout << p; // чтение 3-й строки из файла inout.getline(p,100); // вывод 3-й строки на экран (stdout) cout << endl << "3-я строка: " << endl; cout << p; // установка указателя перед 2-й строкой inout.seekp(pos); // запись на место 2-й строки inout << "Это первая история" << endl; // запись на место 3-й строки inout << "Это первая история" << endl; // установка на начало файла inout.seekg(0); // вывод всего содержимого потока на экран (stdout) cout << endl << endl << inout.rdbuf(); inout.close(); system ("DEL FSTREAM.OUT"); _getch(); }
Рис.1. Результат работы приложения
Суть алгоритма заключается в следующем: в файл записываются три строки текста. Затем они последовательно читаются, и к каждой из них добавляет строка с ее названием. После этого на место второй и третьей строки помещается первая строка после чего содержимое файла снова выводится на экран, используя указатель на буфер ввода/вывода.
На следующем шаге мы рассмотрим работу с классом ofstream.