Namespaces
Variants

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

From cppreference.net

(1)
void open ( const std :: filesystem :: path :: value_type * filename,

std:: ios_base :: openmode mode

= std:: ios_base :: in | std:: ios_base :: out ) ;
(2) (начиная с C++17)
(3) (начиная с C++11)
(4) (начиная с C++17)

Открывает и связывает файл с именем filename с файловым потоком.

При успехе вызывает clear ( ) . При неудаче вызывает setstate ( failbit ) .

1,2) Фактически вызывает rdbuf ( ) - > open ( filename, mode ) (см. std::basic_filebuf::open для подробностей о эффектах этого вызова). Перегрузка (2) предоставляется только если std::filesystem::path::value_type не является char . (начиная с C++17)
3,4) Эффективно вызывает (1,2) как если бы с помощью open ( filename. c_str ( ) , mode ) .

Содержание

Параметры

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

Пример

#include <fstream>
#include <iostream>
#include <string>
int main()
{
    std::string filename = "example.123";
    std::fstream fs;
    fs.open(filename);
    if (!fs.is_open())
    {
        fs.clear();
        fs.open(filename, std::ios::out); // создать файл
        fs.close();
        fs.open(filename);
    }
    std::cout << std::boolalpha;
    std::cout << "fs.is_open() = " << fs.is_open() << '\n';
    std::cout << "fs.good() = " << fs.good() << '\n';
}

Отчеты о дефектах

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

DR Applied to Behavior as published Correct behavior
LWG 22 C++98 было неясно, как изменяется состояние ошибки при успешном открытии состояние ошибки остается неизменным
LWG 409 C++98 состояние ошибки оставалось неизменным при успешном открытии оно сбрасывается [1]
LWG 460 C++98 аргумент по умолчанию для mode в перегрузке (1)
отсутствовал (он присутствует в синопсисе )
добавлен
  1. Решение проблемы LWG #22 переопределено.

Смотрите также

проверяет, есть ли у потока связанный файл
(public member function)
закрывает связанный файл
(public member function)
открывает файл и настраивает его как связанную символьную последовательность
(public member function of std::basic_filebuf<CharT,Traits> )