freopen, _wfreopenfreopen, _wfreopen

ファイル ポインターを再度割り当てます。Reassigns a file pointer. これらの関数のセキュリティを強化したバージョンを使用できます。「」を参照してください freopen_s, _wfreopen_sMore secure versions of these functions are available; see freopen_s, _wfreopen_s.

構文Syntax

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

パラメーターParameters

path
新しいファイル パス。Path of new file.

mode
アクセス許可の種類。Type of access permitted.

stream
構造体へのポインター FILEPointer to FILE structure.

戻り値Return Value

これらの各関数は、新しく開かれたファイルへのポインターを返します。Each of these functions returns a pointer to the newly opened file. エラーが発生した場合、元のファイルは閉じられ、関数は NULL ポインター値を返します。If an error occurs, the original file is closed and the function returns a NULL pointer value. pathmode 、または stream が null ポインターの場合、または filename が空の文字列の場合、「パラメーターの検証」で説明されているように、これらの関数は無効なパラメーターハンドラーを呼び出します。If path, mode, or stream is a null pointer, or if filename is an empty string, these functions invoke the invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数は errno をに設定し、を EINVAL 返し NULL ます。If execution is allowed to continue, these functions set errno to EINVAL and return NULL.

これらのエラーコードの詳細については、「」を参照してください _doserrno, errno, _sys_errlist, and _sys_nerrFor more information on these, and other, error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

解説Remarks

これらの関数のセキュリティを強化したバージョンについては、「」を参照してください freopen_s, _wfreopen_sMore secure versions of these functions exist, see freopen_s, _wfreopen_s.

関数は、 freopen 現在に関連付けられているファイルを閉じ、 stream stream によって指定されたファイルに再割り当てし path ます。The freopen function closes the file currently associated with stream and reassigns stream to the file specified by path. _wfreopen はのワイド文字バージョンです _freopen 。の path 引数と mode 引数 _wfreopen はワイド文字列です。_wfreopen is a wide-character version of _freopen; the path and mode arguments to _wfreopen are wide-character strings. _wfreopen****_freopen それ以外の場合は、との動作は同じです。_wfreopen and _freopen behave identically otherwise.

既定では、この関数のグローバル状態はアプリケーションにスコープが設定されています。By default, this function's global state is scoped to the application. これを変更するには、「 CRT でのグローバル状態」を参照してください。To change this, see Global state in the CRT.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H ルーチンTCHAR.H routine _ UNICODE & _MBCS 未定義_UNICODE & _MBCS not defined _MBCS_MBCS defined _UNICODE_UNICODE defined
_tfreopen freopen freopen _wfreopen

freopen は通常、事前に開かれたファイル、 stdin stdout 、およびを、 stderr ユーザーが指定したファイルにリダイレクトするために使用されます。freopen is typically used to redirect the pre-opened files stdin, stdout, and stderr to files specified by the user. に関連付けられた新しいファイル stream は、次のように mode 、ファイルに要求されるアクセスの種類を指定する文字列であるで開かれます。The new file associated with stream is opened with mode, which is a character string specifying the type of access requested for the file, as follows:

mode アクセスAccess
"r" 読み取り用に開きます。Opens for reading. ファイルが存在しない場合、または見つからない場合、 freopen 呼び出しは失敗します。If the file doesn't exist or cannot be found, the freopen call fails.
"w" 書き込み用に空のファイルを開きます。Opens an empty file for writing. 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。If the given file exists, its contents are destroyed.
"a" 末尾に書き込みができるようにファイルを開きます (追加モード)。EOF (end-of-file) マーカーを削除せずにファイルに新しいデータを書き込みます。Opens for writing at the end of the file (appending) without removing the end-of-file (EOF) marker before new data is written to the file. ファイルが存在しない場合は、作成します。Creates the file if it doesn't exist.
"r+" 読み取りと書き込みの両方のモードで開きます。Opens for both reading and writing. ファイルが存在している必要があります。The file must exist.
"w+" 読み取りと書き込みの両方のモードで空のファイルを開きます。Opens an empty file for both reading and writing. そのファイルが既に存在すると、そのファイルの内容は破棄されます。If the file exists, its contents are destroyed.
"a+" 読み取りと追加の両方のモードでファイルを開きます。Opens for reading and appending. 追加操作には、新しいデータをファイルに書き込む前に EOF マーカーを削除することが含まれます。The appending operation includes the removal of the EOF marker before new data is written to the file. 書き込みが完了した後、EOF マーカーは復元されません。The EOF marker isn't restored after writing is completed. ファイルが存在しない場合は、作成します。Creates the file if it doesn't exist.

既存の "w" "w+" ファイルが破棄される可能性があるため、およびの型は注意して使用してください。Use the "w" and "w+" types with care, as they can destroy existing files. C11 以降で "x" は、をまたはに追加し "w" て、ファイルが存在する場合は上書きせずに、関数を失敗させることができ "w+" ます。Starting in C11, you can append "x" to "w" or "w+" to cause the function fail if the file exists, instead of overwriting it.

またはアクセスの種類を使用してファイルを開くと "a" "a+" 、すべての書き込み操作はファイルの末尾で行われます。When a file is opened with the "a" or "a+" access type, all write operations take place at the end of the file. またはを使用してファイルポインターの位置を移動できますが fseek rewind 、書き込み操作が実行される前に、ファイルポインターは常にファイルの末尾に戻されます。したがって、既存のデータを上書きすることはできません。Although the file pointer can be repositioned using fseek or rewind, the file pointer is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten.

モードでは、 "a" ファイルに追加する前に EOF マーカーは削除されません。The "a" mode doesn't remove the EOF marker before appending to the file. 追加が行われても、MS-DOS TYPE コマンドでは元の EOF マーカーまでのデータしか表示されず、ファイルに追加されたデータは表示されません。After appending has occurred, the MS-DOS TYPE command only shows data up to the original EOF marker and not any data appended to the file. "a+" モードでは、ファイルに追加する前に EOF マーカーが削除されます。The "a+" mode does remove the EOF marker before appending to the file. 追加が終了すると、MS-DOS の TYPE コマンドでファイル内すべてのデータが表示されます。After appending, the MS-DOS TYPE command shows all data in the file. "a+" CTRL + Z EOF マーカーで終了するストリームファイルに追加するには、モードが必要です。The "a+" mode is required for appending to a stream file that is terminated with the CTRL+Z EOF marker.

"r+""w+" 、またはのいずれかのアクセスの種類を指定すると "a+" 、読み取りと書き込みの両方を行うことができます (ファイルは "更新" 用に開かれていると言います)。When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for "update"). ただし、読み取りと書き込みを切り替える場合は、、、のいずれかの操作を行う必要があり fsetpos fseek rewind ます。However, when you switch between reading and writing, there must be an intervening fsetpos, fseek, or rewind operation. 必要に応じて、または操作に現在の位置を指定でき fsetpos fseek ます。The current position can be specified for the fsetpos or fseek operation, if you want. 上記の値に加えて、 mode 新しい行の変換モードを指定するために、文字列に次の文字のいずれかが含まれている場合があります。In addition to the above values, one of the following characters may be included in the mode string to specify the translation mode for new lines.

mode 変換mode modifier 変換モードTranslation mode
t ファイルをテキスト (変換) モードで開きます。Open in text (translated) mode.
b バイナリ (無変換) モードで開く復帰文字と改行文字を含む翻訳は抑制されます。Open in binary (untranslated) mode; translations involving carriage-return and line feed characters are suppressed.

テキスト (変換) モードでは、キャリッジリターンラインフィード (CR-LF) の組み合わせは入力時に1つの改行 (LF) 文字に変換されます。LF 文字は、出力時に cr-lf の組み合わせに変換されます。In text (translated) mode, carriage return-line feed (CR-LF) combinations are translated into single line feed (LF) characters on input; LF characters are translated to CR-LF combinations on output. また、Ctrl + Z は入力時に EOF (end-of-file) 文字として解釈されます。Also, CTRL+Z is interpreted as an end-of-file character on input. 読み取りまたは書き込みのために開かれたファイルでは "a+" 、ランタイムライブラリがファイル末尾に CTRL + Z があるかどうかをチェックし、可能な場合は削除します。In files opened for reading or for writing and reading with "a+", the run-time library checks for a CTRL+Z at the end of the file and removes it, if possible. これは、と ftell を使用して fseek ファイル内を移動すると、 fseek ファイルの末尾付近でが正しく動作しなくなる可能性があるためです。This is done because using fseek and ftell to move within a file may cause fseek to behave improperly near the end of the file. t ANSI の移植性が必要な場合は、Microsoft の拡張機能であるため、オプションを使用しないでください。Don't use the t option if you want ANSI portability because it's a Microsoft extension.

t またはが b に指定されていない場合 mode 、既定の変換モードはグローバル変数によって定義され _fmode ます。If t or b isn't given in mode, the default translation mode is defined by the global variable _fmode. t または b が引数の先頭にある場合、関数は失敗し、を返し NULL ます。If t or b is prefixed to the argument, the function fails and returns NULL.

テキスト モードとバイナリ モードの詳細については、「テキスト モードとバイナリ モードのファイル入出力」を参照してください。For a discussion of text and binary modes, see Text and Binary Mode File I/O.

必要条件Requirements

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

コンソールは、ユニバーサル Windows プラットフォーム (UWP) アプリではサポートされていません。The console isn't supported in Universal Windows Platform (UWP) apps. コンソール、、、およびに関連付けられている標準ストリームハンドルは、 stdin stdout stderr C ランタイム関数が UWP アプリで使用できるようになる前にリダイレクトする必要があります。The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. 互換性について詳しくは、「 Compatibility」をご覧ください。For more compatibility information, see Compatibility.

Example

// 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'

関連項目See also

ストリーム入出力Stream I/O
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode\