ostream *old_tie = cin.tie(nullptr); //
//
//
cin.tie(&cerr); //
cin.tie(old_tie); //
Чтобы связать данный поток с новым потоком вывода, функции tie() передают указатель на новый поток. Чтобы разорвать существующую связь, достаточно передать в качестве аргумента значение 0. Каждый поток может быть связан одновременно только с одним потоком. Однако несколько потоков могут связать себя с тем же объектом ostream.
В заголовке fstream определены три типа, поддерживающие операции ввода и вывода в файл: класс ifstream читает данные из указанного файла, класс ofstream записывает данные в файл, класс fstream читает и записывает данные в тот же файл. Использование того же файла для ввода и вывода рассматривается в разделе 17.5.3.
Эти типы поддерживают те же операции, что и описанные ранее объекты cin и cout. В частности, для чтения и записи в файлы можно использовать операторы ввода-вывода (<< и >>), можно использовать функцию getline() (см. раздел 3.2.2) для чтения из потока ifstream. Материал, изложенный в разделе 8.1, относится также и к этим типам.
Кроме поведения, унаследованного от типа iostream, определенные в заголовке fstream типы имеют в дополнение члены для работы с файлами, связанными с потоком. Эти операции перечислены в табл. 8.3, они могут быть вызваны для объектов классов fstream, ifstream или ofstream, но не других типов ввода-вывода.
Таблица 8.3. Операции, специфические для типов заголовка fstream
| Создает несвязанный файловый поток, — это один из типов, определенных в заголовке fstream |
| Создает объект класса и открывает файл по имени . Параметр может иметь тип string или быть указателем на символьную строку в стиле С (см. раздел 3.5.4). Эти конструкторы являются явными (см. раздел 7.5.4). Заданный по умолчанию режим файла зависит от типа |
| Подобен предыдущему конструктору, но открывает файл в указанном режиме |
fstrm.open( | Открывает файл и связывает его с потоком fstrm. Параметр может иметь тип string или быть указателем на символьную строку в стиле С. Заданный по умолчанию режим файла зависит от типа . Возвращает тип void |
fstrm.close() | Закрывает файл, с которым связан поток fstrm. Возвращает тип void |
fstrm.is_open() | Возвращает значение типа bool, указывающее, был ли связанный с потоком fstrm файл успешно открыт и не был ли он закрыт |
Когда необходимо читать или писать в файл, определяется объект open(), которая выполняет все системные операции, необходимые для поиска указанного файла и его открытия для чтения или записи.
При создании файлового потока можно (но не обязательно) указать имя файла. При предоставлении имени файла функция open() вызывается автоматически:
ifstream in(ifile); //
ofstream out; //