В рассматриваемых до сих пор примерах мы для открытия файлов пользовались конструкторами. Например, для открытия файла для чтения мы писали: ifstream f1("myfile.txt");. К вашему сведению, у конструктора кроме имени файла, к которому надо открыть поток, может быть второй параметр, в котором можно указывать режимы открытия файла. Например, строка ifstream f1("myfile.txt", ios::in | ios::nocreate); означает, что необходимо открыть файл input.txt для чтения и если файл не существует выдать ошибку. За это в данной строке отвечают так называемые биты режимов in и nocreate. Вертикальные разделители ( | ) между флагами нужны при использовании нескольких битовых режимов и для того, чтобы из битов сформировалось единое целое число.
Биты режимов, определённые в классе ios, определяют различные методы открытия потоковых объектов. Приведём сводную таблицу битов режимов.
Биты режимов
| Действие
|
in
| Открыть для чтения (по умолчанию для ifstream)
|
out
| Открыть для записи (по умолчанию для ofstream)
|
ate
| Установить указатель на конец файла (чтение, начиная с конца файла )
|
app
| Открыть для добавления в конец (запись, начиная с конца файла)
|
trunk
| Если файл существует, удалить данные (обрезать до нулевой длины)
|
nocreate
| Не открывать несуществующий файл (выдать ошибку отсутствия файла)
|
noreplace
| Не открывать для вывода существующий файл, если не установлены ate или app (выдать ошибку существования файла)
|
binary
| Открыть в двоичном (не текстовом) режиме
|
Помимо использования конструкторов, для открытия файлов можно применять методы, например:
ofstream f2;
f2.open("myfile.txt");
Здесь, одним выражением мы создаём файловый поток для записи, а другим выражением с помощью метода open() открываем указанный файл для записи. Приведённый пример полностью идентичен следующей строке: ofstream f2("myfile.txt");.