次の方法で共有


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 ポインター値が返されます。 pathmode、またはstreamが null ポインターの場合、またはfilenameが空の文字列の場合、これらの関数は、Parameter 検証で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、NULL を返します。

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

解説

これらの関数のより安全なバージョンが存在する場合は、 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+" の場合にファイルを開くと、すべての書き込み操作はファイルの末尾から行われます。 fseekまたはrewindを使用してファイル ポインターの位置を変更できますが、書き込み操作が実行される前に、ファイル ポインターは常にファイルの末尾に戻されます。したがって、既存のデータを上書きすることはできません。

"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 があるかどうかを確認し、削除できる場合は削除します。 fseekftellを使用してファイル内を移動すると、ファイルの末尾付近でfseekが不適切に動作する可能性があるため、削除されます。 ANSI 移植性が必要な場合、t オプションは Microsoft 拡張機能なので使用しないでください。

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

テキスト モードとバイナリ モードの詳細については、「 Text および binary mode file 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