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 | - | определяет режим открытия потока. Можно использовать следующие константы и их побитовое ИЛИ:
|
||||||||||||||||
| 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 перегрузка приводила к нежелательным преобразованиям | избежано путём создания шаблонной функции |
См. также
| открывает файл и связывает его с потоком (публичный член-функция) |
|
| открывает файл и настраивает его как связанную последовательность символов (публичный член-функция std::basic_filebuf<CharT,Traits>) |
|
заменяет 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