Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функции стандартного ввода.docx
Скачиваний:
1
Добавлен:
17.11.2019
Размер:
538.07 Кб
Скачать

Работа с классом fstream

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

  • open() — открывает файл;

  • close() —закрывает файл;

  • Is_open() — если файл открыт, то функция возвращает true, иначе - false;

  • rdbuf() — выдает указатель на буфер ввода/вывода.

Параметры функции open():

  • имя открываемого файла;

  • способ открытия файла.

Способ открытия файла задается значением перечислимой переменной:

enum open_mode {app, binary, in, out, trunc, ate};

Эта переменная определена в базовом классе ios, поэтому обращение к перечислимым значениям в классе fstream, с экземпляром которого мы работаем, должно идти с указанием класса-родителя: ios:: арр, ios:: binary и т. д.

Назначение способов открытия файла:

  • арр — открыть файл для дозаписи в его конец;

  • binary — открыть файл в бинарном виде (такие файлы были записаны по определенной структуре данных и поэтому должны читаться по этой же структуре);

  • in — открыть файл для чтения из него;

  • out — открыть файл для записи в него. Если файл не существует, он будет создан;

  • trunc — уничтожить содержимое файла, если файл существует (очистить файл);

  • ate — установить указатель позиционирования файла на его конец.

При задании режимов открытия файла можно применять оператор логического или (|), чтобы составлять необходимое сочетание режимов открытия.

В листинге 9.10 приведен пример программы работы с классом fstream, результат работы показан на рис. 9.8.

Листинг 9.10

// З8.срр : Defines the entry point for the console application.

#include "stdafx.h"

#include < fstream>

#include <iostream>

#include <conio.h>

#include <stdio.h>

void _tmain()

{

using namespace std;

/*Используется стандартное пространство имен. Создание двунаправленного (чтение/запись в одном и том же файле) объекта (экземпляра)*/

fstream inout;

inout.open("fstream.out", ios_base::in | ios_base::out | ios_base::trunc);

//вывод в файл

inout << "This is the story1 of a man" << endl;

inout << "This is the story2 of a man" << endl;

inout << "This is the story3 of a man" << endl;

char p[100];

//установка указателя файла (позиционирование) в его начало

inout.seekg(0);

//чтение 1-й строки (длиной не более 100 символов)

inout.getline(p,100);

//вывод 1-й строки на экран (stdout)

cout << endl << "Stringl :" << endl;

cout << p;

//запоминание текущей позиции в файле после 1-го вывода

fstream::pos_type pos = inout.tellg();

//чтение 2-й строки из файла

inout.getline(p,100);

//вывод 2-й строки на экран (stdout)

cout << endl << "String2 :" << endl;

cout << p;

//чтение 3-й строки из файла

inout.getline(p,100);

//вывод 3-й строки на экран (stdout)

cout << endl << "String3 :" << endl;

cout << p;

//установка указателя перед 2-й строкой inout.seekp(pos);

//запись на место 2-й строки

inout << "This is the story2 of a man" << endl;

//запись на место 3-й строки

inout << "This is the story3 of a man" << endl;

//установка на начало файла

inout. seekg (0);

//вывод всего содержимого потока на экран (stdout)

cout << endl << endl < inout. rdbuf();

inout.close();

system ("DEL FSTREAM.OUT") ;

_getch();

}

Алгоритм примера состоит в следующем: в файл записываются три строки текста. Затем они последовательно читаются, и к каждой из них добавляется строка с ее названием.

Рис. 9.8. Результаты работы программы листинга 9.10