Шаг 90.
Microsoft Visual C++ 2010. Язык С/С++.
Ввод и вывод в языках C и C++. Ввод/вывод в языке C++. Работа с классом fstream

    На этом шаге мы рассмотрим основные приемы работы с этим классом.

    Члены этого класса позволяют открыть файл, записать в него данные, поместить файловый указатель (указатель, показывающий, в каком месте файла мы находимся), прочитать данные. Этот класс имеет такие основные функции (методы):

    Параметры функции 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.




Предыдущий шаг Содержание Следующий шаг