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