名前空間
変種
操作

std::freopen

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
C形式I/O
型とオブジェクト
関数
ファイルアクセス
freopen
直接入出力
非書式化入出力
書式付き入力
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
書式付き出力
ファイルポジショニング
エラーハンドリング
ファイル操作
 
ヘッダ<cstdio>で定義
std::FILE* freopen( const char* filename, const char* mode, std::FILE* stream );

まず、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 について)
English 日本語 中文(简体) 中文(繁體)