Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
работа с файлами с++.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
54.54 Кб
Скачать

Ввод/вывод с файлами

C + + предоставляет следующие классы для выполнения вывода и ввода символов в / из файлов:

ofstream: Stream класса писать на файлы

Ifstream: Stream класс для чтения файлов

fstream: Stream классе читать и писать из / в файлы.

Эти классы получено непосредственно или косвенно от класса istream, и ostream. Мы уже использовали объектов, типы которых были эти классы: cin объект класса istream и cout является объектом класса ostream. Таким образом, мы уже с использованием классов, которые связаны с нашим потоков файла. И в самом деле, мы можем использовать наши потоки файлов таким же образом, мы уже привыкли использовать cin и cout, с той лишь разницей, что мы должны связать эти потоки с физическими файлами. Давайте посмотрим, например:

1 2 3 4 5 6 7 8 9 10 11 12

// basic file operations

#include <iostream>

#include <fstream>

using namespace std;

int main () {

ofstream myfile;

myfile.open ("example.txt");

myfile << "Writing this to a file.\n";

myfile.close();

return 0;

}

[file example.txt]

Написание этого в файле.

Этот код создает файл под названием example.txt и вставляет в него предложение таким же образом, мы привыкли делать с cout, но с использованием myfile поток файла вместо этого.

Но давайте идти шаг за шагом: stream поток

Открыть файл

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

Для того, чтобы открыть файл с потоком объекта мы используем его функции-члены open():

open (filename, mode);

Где имя файла с нулем в конце последовательности символов типа const char * (того же типа, что строковые литералы имеют представляющая имя файла, который будет открыт, и mode дополнительного параметра с комбинацией следующих флагов:

ios::in

в открытых для операций ввода.

ios::out

из открытого для вывода.

ios::binary

двоичной Открыть в двоичном режиме.

ios::ate

Ecли установить в исходное положение в конце файла.

Если этот флаг не установлен на любое значение, начальное положение начало файла.

ios::app

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

ios::trunc

TRUNC если файл открывается для вывода операций уже существовали и раньше, свое предыдущее содержание удален и заменен на новый.

Все эти флаги могут быть объединены с помощью оператора побитового OR (|). Например, если мы хотим, чтобы открыть файл example.bin в двоичном режиме, чтобы добавить данные, которые мы могли бы сделать это на следующий вызов функции-члена Open ():

1 2

ofstream myfile;

myfile.open ("example.bin", ios::out | ios::app | ios::binary);

Каждый из open() функции-члены классов ofstream, ifstream and fstream имеет режим по умолчанию, который используется, если файл открывается без второго аргумента:

class

режим по умолчанию параметр

ofstream

ios::out

ifstream

ios::in

fstream

ios::in | ios::out

Для ifstream и ofstream classes, ios::in and ios::out втоматически и, соответственно, предполагается, даже если режим, который не включает их передается в качестве второго аргумента в open() функции-члена.

Значение по умолчанию применяется только в том случае, если функция вызывается без указания значения для параметра режима. Если функция вызывается с любым значением этого параметра в режиме по умолчанию переопределен, не сочетается.

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

С первой задачей, которая выполняется на объект потока файлов, как правило, чтобы открыть файл, эти три класса включает конструктор, который автоматически вызывает open() функции-члены и имеет точно такие же параметры, как пользователя. Таким образом, мы могли бы также заявили предыдущий объект MYFILE и провели ту же операцию открытия в нашем предыдущем примере, написав:

 

ofstream myfile ("example.bin", ios::out | ios::app | ios::binary);

Объединение строительных объектов и открытия потока в одном заявлении. Обе формы, чтобы открыть файл действительны и тому подобное.

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

 

bool value of true in the case that indeed the stream object is associated with an open file, or false otherwise:

 

if (myfile.is_open()){/ * в порядке, продолжить вывод * /}