
Ввод/вывод с файлами
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()){/ * в порядке, продолжить вывод * /} |