Spec-Zone.ru › C++

std::basic_fstream<CharT,Traits>::basic_fstream

basic_fstream();
(1)
explicit basic_fstream( const char* filename,
                        std::ios_base::openmode mode
                            = std::ios_base::in | std::ios_base::out );
(2)
explicit basic_fstream( const std::filesystem::path::value_type* filename,
                        std::ios_base::openmode mode
                            = std::ios_base::in | std::ios_base::out );
(3) (с C++17)
explicit basic_fstream( const std::string& filename,
                        std::ios_base::openmode mode
                            = std::ios_base::in | std::ios_base::out );
(4) (с C++11)
template< class FsPath >
explicit basic_fstream( const FsPath& filename,
                        std::ios_base::openmode mode
                            = std::ios_base::in | std::ios_base::out );
(5) (с C++17)
basic_fstream( basic_fstream&& other );
(6) (с C++11)
basic_fstream( const basic_fstream& rhs ) = delete;
(7) (с C++11)

Создаёт новый поток файла.

1) Конструктор по умолчанию: создаёт поток, не связанный с файлом: инициализирует std::basic_filebuf и создаёт базовый класс с указателем на этот инициализированный std::basic_filebuf член.
2,3) Сначала выполняет те же шаги, что и конструктор по умолчанию, затем связывает поток с файлом, вызывая rdbuf()->open(filename, mode) (см. std::basic_filebuf::open для получения подробностей об эффектах этого вызова). Если вызов open() возвращает нулевой указатель, устанавливает setstate(failbit). Перегрузка (3) предоставляется только если std::filesystem::path::value_type не является char.(с C++17)
4,5) Аналогично basic_fstream(filename.c_str(), mode). (5) участвует в разрешении перегрузки только если FsPath является std::filesystem::path.(с C++17)
6) Перегруженный конструктор. Сначала перегружает базовый класс из other (что не влияет на указатель rdbuf()), затем перегружает член std::basic_filebuf, затем вызывает this->set_rdbuf() для установки нового basic_filebuf в качестве указателя rdbuf() в базовом классе.
7) Копирующий конструктор удалён: этот класс не копируется.

Параметры

filename - имя файла для открытия
mode - определяет режим открытия потока. Можно использовать следующие константы и их побитовое ИЛИ:
Константа Объяснение
app переместиться в конец потока перед каждым записью
binary открыть в бинарном режиме
in открыть для чтения
out открыть для записи
trunc удалить содержимое потока при открытии
ate переместиться в конец потока сразу после открытия
noreplace (C++23) открыть в эксклюзивном режиме
other - другой поток файла, используемый в качестве источника

Пример

#include <fstream>
#include <string>
#include <utility>
 
int main()
{
    std::fstream f0;
    std::fstream f1("test.bin", std::ios::binary);
    std::string name = "example.txt";
    std::fstream f2(name);
    std::fstream f3(std::move(f1));
}

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применён к Поведение, как опубликовано Корректное поведение
LWG 460 C++98 дополнительный аргумент mode в перегрузке (2)
был пропущен (он есть в сигнатуре)
добавлен
LWG 3430 C++17 std::filesystem::path перегрузка приводила к нежелательным преобразованиям избежано путём создания шаблонной функции

См. также

open
открывает файл и связывает его с потоком
(публичный член-функция)
open
открывает файл и настраивает его как связанную последовательность символов
(публичный член-функция std::basic_filebuf<CharT,Traits>)
set_rdbuf
заменяет rdbuf без очистки его состояния ошибок
(защищённая член-функция)
(конструктор)
создаёт объект
(публичный член-функция std::basic_iostream<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_fstream/basic_fstream

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API