std::freopen
From cppreference.com
| ヘッダ <cstdio>で定義 |
||
まず、stream に関連付けられたファイルを、エラーを無視して閉じることを試みます。次に、filename がヌルでない場合、mode を使用して std::fopen のように、filename で指定されたファイルを開こうとし、そのファイルを stream が指すファイルストリームに関連付けます。filename がヌルポインタの場合、関数は既に stream に関連付けられているファイルを再オープンしようとします(この場合、どのモード変更が許可されるかは実装定義です)。
目次 |
[編集] パラメータ
| filename | - | ファイルストリームを関連付けるファイル名 |
| モード | - | 新しい ファイルアクセスモード を決定するヌル終端文字配列 |
| stream | - | 変更するファイルストリーム |
[編集] ファイルアクセスフラグ
| ファイルアクセス モード文字列 |
意味 | 説明 | ファイルが存在する場合のアクション 既に存在する場合 |
ファイルが存在する場合のアクション 存在しない場合 |
|---|---|---|---|---|
| "r" | read | 読み込み用にファイルを開く | 最初から読み込む | NULL を返し、エラーを設定します。 |
| "w" | write | 書き込み用にファイルを作成する | 内容を破棄する | 新規作成する |
| "a" | append | ファイルに追記する | 末尾に書き込む | 新規作成する |
| "r+" | 拡張読み込み | 読み書き用にファイルを開く | 最初から読み込む | NULL を返し、エラーを設定します。 |
| "w+" | 拡張書き込み | 読み書き用にファイルを作成する | 内容を破棄する | 新規作成する |
| "a+" | 拡張追記 | 読み書き用にファイルを開く | 末尾に書き込む | 新規作成する |
| ファイルアクセスモードフラグ "b" は、オプションでファイルを バイナリモード で開くために指定できます。このフラグは POSIX システムでは効果がありませんが、Windows などでは、'\n' および '\x1A' の特別な処理を無効にします。 追記ファイルアクセスモードでは、ファイル位置指示子の現在の位置に関係なく、データはファイルの末尾に書き込まれます。 | ||||
| ファイルアクセスモードフラグ "x" は、オプションで "w" または "w+" 指定子に追加できます。このフラグは、ファイルが存在する場合に上書きするのではなく、関数を失敗させます。(C++17) | ||||
| モードが上記リストのいずれかの文字列でない場合、動作は未定義です。一部の実装では、追加のサポートされているモードが定義されています(例:Windows)。 | ||||
[編集] 戻り値
成功した場合は stream、失敗した場合はヌルポインタ。
[編集] 注記
std::freopen は、I/O 操作または std::fwide によってストリームのナロー/ワイド方向が確立された後に、その方向を変更できる唯一の方法です。
Microsoft CRT 版の std::freopen は、filename がヌルポインタの場合、モードの変更をサポートしておらず、これをエラーとして扱います(ドキュメントを参照)。可能な回避策として、非標準関数の _setmode() があります。
[編集] 例
次のコードは、stdout をファイルにリダイレクトします。
このコードを実行
#include <cstdio> int main() { std::printf("stdout is printed to console\n"); if (std::freopen("redir.txt", "w", stdout)) { std::printf("stdout is redirected to a file\n"); // this is written to redir.txt std::fclose(stdout); } }
出力
stdout is printed to console
[編集] 関連項目
| ファイルを開く (関数) | |
| ファイルを閉じる (関数) | |
| C ドキュメント (freopen について)
| |