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

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

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

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

  • is_open() — возвращает true, если файл открыт, и false — в противном случае;

  • put() — записывает в файл один символ;

  • write() — записывает в файл заданное число символов;

  • skeep() — перемещает указатель позиционирования в заданное место файла;

  • tellp() —выдает текущее значение указателя позиционирования;

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

  • rdbuf () — выдает указатель на буфер вывода (этот буфер находится в структуре, с которой связывается файл при его открытии).

В листинге 9.11 приведен пример использования класса ofstream.

Листинг 9.11

#include <fstream>

ofstream FILE; /*объявляем переменную FILE типа ofstream (создаем экземпляр класса)*/

FILE.open("a.txt"); //вызываем метод открытия файла

if(FILE = NULL) return(0); //неудачное открытие файла

for(int i=0; i<2; i++)

FILE << "string " << i << endl; //вывод в файл

FILE.close(); //закрытие файла

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

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

  • open() — открывает файл для чтения из него информации;

  • is_open () — возвращает true, если файл открыт, и false — в противном случае;

  • get() — читает из файла один символ;

  • read() — читает из файла заданное число символов;

  • eof() — возвращает ненулевое значение, когда указатель позиционирования достигает конца файла;

  • peek() — выдает очередной символ потока, но не выбирает его (не сдвигает указатель позиционирования данного в файле);

  • seekg() — перемещает указатель позиционирования в заданное место файла;

  • tellg() — выдает текущее значение указателя позиционирования;

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

  • rdbuf() — выдает указатель на буфер ввода (этот буфер находится в структуре, с которой связывается файл при его открытии).

Пример использования класса приведен в листинге 9.12.

Листинг 9.12

#include <fstream>

ifstream FILE; /*объявляем переменную FILE типа ifstream (создаем экземпляр класса) */

char р[100];

FILE.open("a.txt"); //вызываем метод открытия файла

if(FILE ==NULL) return(0); //неудачное открытие файла

while (!FILE.eof()) //проверка на признак конца файла

{

FILE >> p; //чтение из файла

cout << р << endl; //вывод прочитанных данных на экран

}

FILE.close(); //закрытие файла

В листинге 9.13 приведен пример использования обоих классов: ofstream, ifstream (оба находятся в fstream), результат работы программы показан на рис. 9.9.

Листинг 9.13

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

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <conio.h>

#define DelKey 's' //этот символ будет удаляться из потока

#define maxline 1000

int _tmain(int argc, "char* argv[])

{

using namespace std; //используется стандартное пространство имен

//Проверка вывода

ofstream FILE;

FILE.open("c:\\a.txt", ios::out) ;

char p[maxline];

int i,pos;

for(i=0; i<2; i++)

FILE << "string " << i; /* << endl; endl вводить не надо, иначе цикл будет длиннее*/

FILE.close();

//Проверка ввода (чтения по записям)

ifstream FILE1;

FILEl.open("c:\\a.txt");

FILEl.seekg(0); /*указатель — в начало(он и так будет в начале, но это, чтобы посмотреть, как работает seekg())*/

if(FILE1 == NULL) //так надо проверять на ошибку открытия файла

return(0);

while(!FILE1.eof()) //так проверяется конец файла

{

FILE1 >> р >> i;

cout << p << i << endl;

}

FILEl.close();

_getch();

//Проверка посимвольного чтения

ifstream FILE2;

char с;

FILEa.open("c:\\a.txt");

if(FILE2 == NULL) //так проверять на плохое открытие

return(0);

while(!FILE2.eof()) //так проверяется конец файла

{

c=FILE2.peek(); /*смотрит, какой следующий символ будет считан, но указатель позиционирования при этом не сдвигается: остается на этом символе*/

streamoff cgp=FILE2.tellg(); /*так определяется текущая позиция в файле*/

if (c==DelKey) /*выбрасываются все символы DelKey из читаемого потока*/

{

pos= cgp + 1; // готовимся пропустить символ по seekg()

FILE2.seekg(pos); /*передвинули указатель позиционирования на один символ дальше, чтобы пропустить символ */

continue; //на продолжение цикла

}

FILE2.get(с); //чтение символа в с

cout << с;

} //while

cout << endl;

FILE2.close() ;

_getch() ;

System("DEL С:\\A.TXT"); //удаление рабочего файла

}//_tmain()

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