最終更新日時(UTC): 2022年11月20日 03時49分01秒
suomesta が更新

履歴 編集

function
<fstream>

# std::basic_fstream::open

    void open(
      const char* s,
      ios_base::openmode mode = ios_base::in | ios_base::out); // (1)
    void open(
      const filesystem::path::value_type* s,
      ios_base::openmode mode = ios_base::in | ios_base::out); // (2) C++17
    void open(
      const string& s,
      ios_base::openmode mode = ios_base::in | ios_base::out); // (3)
    void open(
      const filesystem::path& s,
      ios_base::openmode mode = ios_base::in | ios_base::out); // (4) C++17

## 概要

ファイルを開く

## 効果

- (1) : 仮引数`s`で指定したファイルを開く。
  - `rdbuf()->open(s, mode)`を呼び出す。その結果が成功だった（戻り値がヌルポインタではなかった）場合、`clear()`を呼び出す。その結果が失敗だった（戻り値がヌルポインタだった）場合、`setstate(failbit)`を呼び出す。
- (2) : `std::filesystem::path::value_type`の型が`char`ではないときのみ定義される。効果は(1)と同じ。
- (3) : ファイルを指定する引数の型が`std::string`である点を除き、(1)と同じ。
- (4) : ファイルを指定する引数の型が`std::filesystem::path`である点を除き、(1)と同じ。

## 例

    #include <iostream>
    #include <fstream>

    int main()
    {
      std::fstream s1;
      s1.open("file.txt");
      if (!s1) {
        std::cerr << "ファイルを開けませんでした。" << std::endl;
      }

      try
      {
        std::fstream s2;
        s2.open("internal.dat", std::ios_base::in | std::ios_base::out | std::ios_base::binary);
        s2.exceptions(std::ios_base::failbit);
      } catch (const std::exception& e) {
        std::cerr << "ファイルを開けませんでした。" << std::endl;
      }
    }

### 出力

    ファイルを開けませんでした。
    ファイルを開けませんでした。

## バージョン

### 言語

- C++98
- C++17: `std::filesystem::path`への対応

## 参照

- LGW issue 2676. Provide filesystem::path overloads for File-based streams