Spec-Zone.ru › C++

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

void open( const char* filename,
           std::ios_base::openmode mode
               = std::ios_base::in | std::ios_base::out );
(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)
void open( const std::string& filename,
           std::ios_base::openmode mode
               = std::ios_base::in | std::ios_base::out );
(3) (с C++11)
void open( const std::filesystem::path& filename,
           std::ios_base::openmode mode
               = std::ios_base::in | std::ios_base::out );
(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); // create file
        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 Применено к Поведение, как опубликовано Правильное поведение
LWG 22 C++98 не было ясно, как изменяется состояние ошибки при успешном открытии состояние ошибки не изменяется
LWG 409 C++98 состояние ошибки не изменялось при успешном открытии оно очищается[1]
LWG 460 C++98 аргумент по умолчанию для mode в перегрузке (1)
отсутствовал (он присутствует в синопсисе)
добавлен
  1. Решение проблемы LWG № 22 переопределено.

См. также

is_open
проверяет, ассоциирован ли поток с файлом
(публичный член-функция)
close
закрывает связанный файл
(публичный член-функция)
open
открывает файл и настраивает его в качестве связанной последовательности символов
(публичный член-функция std::basic_filebuf<CharT,Traits>)

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

Spec-Zone.ru

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