Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
135
Добавлен:
10.12.2013
Размер:
856.06 Кб
Скачать

6. Файловые потоки

Файл – именованная информация на внешнем носителе, т. е. логически файл – это конечное множество последовательных байтов, следовательно, устройства такие как принтер, клавиатура и монитор являются частным случаем файлов.

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

Стандартная библиотека содержит три класса для работы с файлами: ifstream – класс входных файловых потоков; ofstream – класс выходных файловых потоков; fstream – класс двунаправленных файловых потоков.

Эти классы являются производными от классов istream, ostream и iostream соот­ветственно, поэтому они наследуют перегруженные операции <<и >>, флаги фор­матирования, манипуляторы, методы, состояние потоков и т. д.

Использование файлов в программе предполагает следующие операции:

  • создание потока;

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

  • обмен (ввод/вывод);

  • уничтожение потока;

  • закрытие файла.

Каждый класс файловых потоков содержит конструкторы, с помощью которых можно создавать объекты этих классов различными способами.

  • Конструкторы без параметров создают объект соответствующего класса, не связывая его с файлом:

ifstream( );

ofstream( );

fstream( );

  • Конструкторы с параметрами создают объект соответствующего класса, от­ крывают файл с указанным именем и связывают файл с объектом:

ifstream(const char *name, int mode = ios::in);

ofstream(const char *name, int mode = ios::out | ios::trunc);

fstreamCconst char *name, int mode = ios::in | ios::out);

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

ios::in – открыть файл для чтения;

ios::out – открыть файл для записи;

ios::ate – установить указатель на конец файла, читать нельзя, можно только записывать данные в конец файла;

ios::app – открыть файл для добавления;

ios::trunc – если файл существует, то создать новый;

ios::binary – открыть в двоичном режиме;

ios::nocreate – если файл не существует, выдать ошибку, новый файл не открывать;

ios::noreplace – если файл существует, выдать ошибку, существующий файл не открывать;

Открыть файл в программе можно с использованием либо конструкторов, либо метода open, имеющего такие же параметры, как и в соответствующем конструк­торе

Примеры:

1.

filebuf fbuf;//создается объект типа filebuf

fbuf.open(“..\\f.dat”,ios::in);//связали fbuf с файлом и открыли для чтения

istream stream(&fbuf);//связали fbuf с потоком stream

2.

fstream stream; //конструктор без параметров

stream.open(“..\\f.dat”,ios::in);//открывается файл, который связывается через fbuf с потоком

3.

fstream stream(“..\\f.dat”,ios::in);//конструктор с параметрами, создает и откывает для чтения файл

После того как файловый поток открыт работать с ним можно также как и со стандартными потоками cin и cout. При чтении данных из входного файла надо контролировать был ли достигнут конец файла после очередной операции вывода. Это можно делать с помощью метода eof().

Если в процессе работы возникнет ошибочная ситуация, то потоковый объект принимает значение равное 0.

Когда программа покидает область видимости потокового объекта, то он уничтожается, при этом перестает существовать связь между потоковым объектом и физическим файлом, а сам файл закрывается. Если файл требуется закрыть раньше, то используется метод close().

Соседние файлы в папке II cemecTP