std::basic_filebuf<CharT,Traits>:: open
|
basic_filebuf
*
open
(
const
char
*
s,
std::
ios_base
::
openmode
mode
)
;
|
(1) | |
|
basic_filebuf
*
open
(
const
std::
string
&
str,
std::
ios_base
::
openmode
mode
)
;
|
(2) | (C++11以降) |
|
basic_filebuf
*
open
(
const
std::
filesystem
::
path
&
p,
std:: ios_base :: openmode mode ) ; |
(3) | (C++17以降) |
|
basic_filebuf
*
open
(
const
std
::
filesystem
::
path
::
value_type
*
s,
std:: ios_base :: openmode mode ) ; |
(4) | (C++17以降) |
関連付けられたファイルが既に開かれていた場合( is_open ( ) ! = false )、直ちにヌルポインタを返します。
それ以外の場合、指定された名前のファイルを開く( s , p. c_str ( ) (C++17以降) または str. c_str ( ) オーバーロードに依存)。 std::ios_base::openmode 値は、例えば std:: ios_base :: out | std:: ios_base :: app のように記述できる。
|
オーバーロード
(4)
は、
|
(C++17以降) |
ファイルは、あたかも
std::fopen
を呼び出したかのように開かれ、第2引数(ファイルアクセスモード)は
mode
&
~
std::
ios_base
::
ate
の結果によって決定されます。結果が表に示されたフラグの組み合わせでない場合、
open()
は失敗します:
| mode & ~ std:: ios_base :: ate |
std::fopen
アクセス モード |
ファイルが既に存在する場合の動作 | ファイルが存在しない場合の動作 | |||||
|---|---|---|---|---|---|---|---|---|
| binary | in | out | trunc | app |
noreplace
(C++23以降) |
|||
| - | + | - | - | - | - | "r" | 先頭から読み込み | オープン失敗 |
| ○ | ○ | × | × | × | × | "rb" | ||
| - | + | + | - | - | - | "r+" | エラー | |
| + | + | + | - | - | - | "r+b" | ||
| - | - | + | - | - | - | "w" | 内容を破棄 | 新規作成 |
| - | - | + | + | - | - | |||
| + | - | + | - | - | - | "wb" | ||
| ○ | × | ○ | ○ | × | × | |||
| - | + | + | + | - | - | "w+" | ||
| + | + | + | + | - | - | "w+b" | ||
| - | - | + | - | - | + | "wx" | オープン失敗 | 新規作成 |
| - | - | + | + | - | + | |||
| ○ | × | ○ | × | × | ○ | "wbx" | ||
| ○ | × | ○ | ○ | × | ○ | |||
| - | + | + | + | - | + | "w+x" | ||
| + | + | + | + | - | + | "w+bx" | ||
| - | - | + | - | + | - | "a" | 末尾に書き込み | 新規作成 |
| - | - | - | - | + | - | |||
| + | - | + | - | + | - | "ab" | ||
| ○ | × | × | × | ○ | × | |||
| - | + | + | - | + | - | "a+" | ||
| - | + | - | - | + | - | |||
| + | + | + | - | + | - | "a+b" | ||
| ○ | ○ | × | × | ○ | × | |||
オープン操作が成功し、かつ
(
openmode
&
std::
ios_base
::
ate
)
!
=
0
(
ate
ビットが設定されている)場合、ファイル位置をファイルの末尾に再配置します。これは
std::
fseek
(
file,
0
,
SEEK_END
)
を呼び出した場合と同様です。ここで
file
は
std::fopen
を呼び出して返されたポインタです。再配置が失敗した場合、
close()
を呼び出し、失敗を示すためにヌルポインタを返します。
目次 |
パラメータ
| s, str, p | - | 開くファイル名; s はヌル終端文字列を指している必要があります |
| openmode | - | ファイルオープンモード、 std::ios_base::openmode モードのビット単位OR |
戻り値
this 成功時はポインタ、失敗時はヌルポインタを返します。
注記
open()
は通常、コンストラクタまたは
open()
メンバ関数を通じて
std::basic_fstream
によって呼び出されます。
例
#include <fstream> #include <iostream> int main() { std::string filename = "Test.b"; std::filebuf fb; // 読み取り用ファイルの準備 double d = 3.14; if (!fb.open(filename, std::ios::binary | std::ios::out)) { std::cout << "Open file " << filename << " for write failed\n"; return 1; } fb.sputn(reinterpret_cast<char*>(&d), sizeof d); fb.close(); // 読み取り用にファイルを開く double d2 = 0.0; if (!fb.open(filename, std::ios::binary | std::ios::in)) { std::cout << "Open file " << filename << " for read failed\n"; return 1; } auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2); if (sizeof(d2) != got) std::cout << "Read of " << filename << " failed\n"; else std::cout << "Read back from file: " << d2 << '\n'; }
出力:
Read back from file: 3.14
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 596 | C++98 |
open()
は追記モードでファイルを開くことができなかった
|
追記モードで開くことができる |
関連項目
|
関連付けられたファイルが開いているかどうかをチェックする
(public member function) |
|
|
出力エリアバッファをフラッシュし、関連付けられたファイルを閉じる
(public member function) |