freopen, _wfreopen

ファイル ポインターを再度割り当てます。 より安全なバージョンの関数を使用できます。を参照してくださいfreopen_s_wfreopen_s

構文

FILE *freopen(
   const char *path,
   const char *mode,
   FILE *stream
);
FILE *_wfreopen(
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream
);

パラメーター

path
新しいファイル パス。

mode
アクセス許可の種類。

stream
FILE 構造体へのポインター。

戻り値

これらの各関数は、新しく開かれたファイルへのポインターを返します。 エラーが発生した場合、元のファイルは閉じられ、関数はポインター値を NULL 返します。 、modeまたは null ポインターの場合path、または空の文字列の場合filenameは、「パラメーターの検証」で説明されているように、これらの関数は無効なパラメーター ハンドラーを呼び出streamします。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、NULL を返します。

エラー コードの詳細については、「、、、、、」_sys_nerrを参照してくださいerrno_sys_errlist_doserrno

解説

これらの関数のより安全なバージョンが存在しますfreopen_s_wfreopen_s

この関数はfreopen、現在関連付けられているstreamファイルを閉じ、で指定されたpathファイルに再割り当てしますstream_wfreopen_freopen のワイド文字バージョンであり、_wfreopen に対する path 引数と mode 引数はワイド文字列です。 それ以外では、_wfreopen_freopen の動作は同じです。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチンのマップ

TCHAR.H ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tfreopen freopen freopen _wfreopen

freopen は、通常、既に開いているファイル stdinstdout、および stderr のユーザーが指定したファイルへのリダイレクトに使用されます。 関連付けられている stream 新しいファイルは、次のように、ファイルに対して要求されたアクセスの種類を指定する文字列である文字列で mode開かれます。

mode アクセス
"r" 読み取り用に開きます。 ファイルが存在しないか、見つからない場合、呼び出しは freopen 失敗します。
"w" 書き込み用に空のファイルを開きます。 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。
"a" 末尾に書き込みができるようにファイルを開きます (追加モード)。EOF (end-of-file) マーカーを削除せずにファイルに新しいデータを書き込みます。 ファイルが存在しない場合は、作成します。
"r+" 読み取りと書き込みの両方のモードで開きます。 ファイルが存在する必要があります。
"w+" 読み取りと書き込みの両方のモードで空のファイルを開きます。 そのファイルが既に存在すると、そのファイルの内容は破棄されます。
"a+" 読み取りと追加の両方のモードでファイルを開きます。 追加操作には、新しいデータをファイルに書き込む前に EOF マーカーを削除することが含まれます。 書き込みの完了後に、EOF マーカーは復元されません。 ファイルが存在しない場合は、作成します。

既存のファイルを破棄するため、"w""w+" の型は注意して使用します。 C11 以降では、"w" または "w+""x" を付加すると、ファイルが存在する場合に上書きするのではなく、関数を失敗させることができます。

アクセスの種類が "a" または "a+" の場合にファイルを開くと、すべての書き込み操作はファイルの末尾から行われます。 ファイル ポインターは、またはrewindを使用してfseek再配置できますが、書き込み操作が実行される前に、ファイル ポインターは常にファイルの末尾に戻されます。したがって、既存のデータを上書きすることはできません。

"a" モードでは、ファイルへの追加の前に EOF マーカーは削除されません。 追加が行われても、MS-DOS TYPE コマンドでは元の EOF マーカーまでのデータしか表示されず、ファイルに追加されたデータは表示されません。 "a+" モードでは、ファイルへの追加の前に EOF マーカーが削除されます。 追加が終了すると、MS-DOS の TYPE コマンドでファイル内すべてのデータが表示されます。 Ctrl + Z EOF マーカーで終了するストリーム ファイルに追加するには、 "a+" モードを使用する必要があります。

"r+""w+"、または "a+" のいずれかのアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルは "更新" モードで開きます)。 ただし、読み取りと書き込みを切り替える場合は、その前に fsetposfseek、または rewind の操作を実行する必要があります。 必要に応じて、fsetpos または fseek の操作に現在位置を指定できます。 上記の値に加え、mode 文字列に次の文字の 1 つを追加すると、改行の変換モードを指定できます。

mode modifier 変換モード
t ファイルをテキスト (変換) モードで開きます。
b ファイルをバイナリ (無変換) モードで開きます。復帰文字と改行文字の変換は行われません。

テキスト (変換) モードでは、復帰と改行 (CR-LF) の組み合わせは入力時に 1 つの改行 (LF) 文字に変換され、LF 文字は出力時に CR-LF の組み合わせに変換されます。 また、Ctrl + Z は入力時に EOF (end-of-file) 文字として解釈されます。 "a+" を使用して読み取りモード、または読み取りおよび書き込みの両方のモードで開かれたファイルでは、ランタイム ライブラリがファイル末尾に Ctrl + Z があるかどうかを確認し、削除できる場合は削除します。 ファイル内を使用 fseek して ftell 移動すると、ファイルの末尾付近で不適切な動作が発生する可能性 fseek があるため、削除されます。 ANSI 移植性が必要な場合、t オプションは Microsoft 拡張機能なので使用しないでください。

t または bmode に指定しない場合、既定の変換モードは _fmode グローバル変数によって定義されます。 t または b を引数の先頭に指定すると、エラーが発生して NULLが返されます。

テキストモードとバイナリモードの詳細については、テキストモードおよびバイナリモードファイルI/Oを参照してください

必要条件

機能 必須ヘッダー
freopen <stdio.h>
_wfreopen <stdio.h> または <wchar.h>

ユニバーサル Windows プラットフォーム (UWP) アプリではコンソールがサポートされていません。 コンソール (stdinstdoutstderr) に関連付けられている標準ストリームのハンドルは、C ランタイム関数によって UWP アプリで使用される前に、リダイレクトする必要があります。 互換性の詳細については、「 Compatibility」を参照してください。

// crt_freopen.c
// compile with: /W3
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>

FILE *stream;

int main( void )
{
   // Reassign "stderr" to "freopen.out":
   stream = freopen( "freopen.out", "w", stderr ); // C4996
   // Note: freopen is deprecated; consider using freopen_s instead

   if( stream == NULL )
      fprintf( stdout, "error on freopen\n" );
   else
   {
      fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
      fprintf( stream, "This will go to the file 'freopen.out'\n" );
      fclose( stream );
   }
   system( "type freopen.out" );
}
successfully reassigned
This will go to the file 'freopen.out'

関連項目

ストリーム入出力
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode