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 適用対象 公開時の動作 正しい動作
LWG 22 C++98 正常なopen時のエラー状態の変化が不明確 エラー状態は変更されない
LWG 409 C++98 正常なopen時にエラー状態が変更されなかった クリアされる [1]
LWG 460 C++98 オーバーロード (1) mode のデフォルト引数が
欠落していた( 概要 には存在)
追加された
  1. LWG issue #22 の解決は上書きされます。

関連項目

ストリームに関連付けられたファイルがあるかどうかをチェックする
(公開メンバ関数)
関連付けられたファイルを閉じる
(公開メンバ関数)
ファイルを開き、関連付けられた文字シーケンスとして設定する
( std::basic_filebuf<CharT,Traits> の公開メンバ関数)