最終更新日時: 2025年09月29日 02時08分59秒 (JST)
Raclamusi が更新

履歴 編集

function
<fstream>

# std::basic_filebuf::close

    basic_filebuf* close();

## 概要

put領域をクリアし、ファイルを閉じる

## 効果

`is_open()`の呼び出し結果が`false`の場合、`nullptr`を返す。

put領域が存在する場合(ファイルを開いているなどして)、`overflow(traits::eof())`を呼び出してフラッシュする。

仮想メンバ関数`underflow`, `overflow`, `seekoff`, `seekpos`のうち、最後に呼ばれたのが`overflow`の場合、`std::codecvt::unshift()`を呼び出し、再び`overflow(traits::eof())`を呼び出してフラッシュする。

最後にあたかも`fclose`を呼び出したかのように振る舞う。

上記に書いた`fclose`を含む関数呼び出しのいずれかで失敗があった場合、`nullptr`を返す。ただし例外が発生した場合は一度捕捉しファイルを閉じたあとに例外を投げ直す。

## 戻り値

成功したら`this`を返す。それ以外の場合は`nullptr`を返す

## 事後条件

この関数を呼び出したあとは、`is_open`の呼び出し結果は`close`が成功したか否かに関わらず`false`になる

## 例

    #include <iostream>
    #include <fstream>

    int main()
    {
      std::fstream fs;
      std::filebuf* buf = fs.rdbuf();

      if (buf->open("foo", std::ios_base::out)) {
        buf->close();
      }
    }

## バージョン

### 言語

- C++98