Читайте также:
|
|
Члены этого класса позволяют открыть файл, записать в него данные, переместить указатель позиционирования (указатель, показывающий, в каком месте файла мы находимся), прочитать данные. Этот класс имеет такие основные функции (методы):
¨ 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
Дата добавления: 2015-07-26; просмотров: 103 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пространства имен | | | Работа с классом ifstream |