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
ポインター値が返されます。 path
、mode
、またはstream
が null ポインターの場合、またはfilename
が空の文字列の場合、これらの関数は、Parameter 検証で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらの関数は errno
を EINVAL
に設定し、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
は、通常、既に開いているファイル stdin
、stdout
、および 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+"
のいずれかのアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルは "更新" モードで開きます)。 ただし、読み取りと書き込みを切り替える場合は、その前に fsetpos
、fseek
、または 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
または b
を mode
に指定しない場合、既定の変換モードは _fmode
グローバル変数によって定義されます。 t
または b
を引数の先頭に指定すると、エラーが発生して NULL
が返されます。
テキスト モードとバイナリ モードの詳細については、「 Text および binary mode file I/O を参照してください。
要件
機能 | 必須ヘッダー |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> または <wchar.h> |
ユニバーサル Windows プラットフォーム (UWP) アプリではコンソールがサポートされていません。 コンソール (stdin
、stdout
、stderr
) に関連付けられている標準ストリームのハンドルは、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