Namespaces
Variants

std:: freopen

From cppreference.net
< cpp ‎ | io ‎ | c
ヘッダーで定義 <cstdio>
std:: FILE * freopen ( const char * filename, const char * mode, std:: FILE * stream ) ;

まず、関連付けられたファイルを stream で閉じる試みが行われ、エラーは無視されます。次に、 filename が null でない場合、 filename で指定されたファイルを mode を使用して std::fopen のように開く試みが行われ、そのファイルが stream で指されるファイルストリームに関連付けられます。 filename が null ポインタの場合、関数は既に stream に関連付けられているファイルを再び開く試みを行います(この場合、どのモード変更が許可されるかは実装定義です)。

目次

パラメータ

filename - ファイルストリームに関連付けるファイル名
mode - 新しい ファイルアクセスモード を決定するNULL終端文字列
stream - 変更するファイルストリーム

ファイルアクセスフラグ

ファイルアクセス
モード文字列
意味 説明 ファイルが既に存在する場合の動作 ファイルが存在しない場合の動作
"r" read 読み取り用にファイルを開く 先頭から読み取り NULL を返し、エラーを設定
"w" write 書き込み用にファイルを作成 内容を破棄 新規作成
"a" append ファイルに追記 末尾に書き込み 新規作成
"r+" read extended 読み書き用にファイルを開く 先頭から読み取り NULL を返し、エラーを設定
"w+" write extended 読み書き用にファイルを作成 内容を破棄 新規作成
"a+" append extended 読み書き用にファイルを開く 末尾に書き込み 新規作成
ファイルアクセスモードフラグ "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

関連項目

ファイルを開く
(関数)
ファイルを閉じる
(関数)