freopen_s、_wfreopen_s
ファイル ポインターを再度割り当てます。これらは CRT のセキュリティ機能に説明されているように、のセキュリティが強化 freopen、_wfreopen のバージョンです。
errno_t freopen(
FILE** pFile,
const char *path,
const char *mode,
FILE *stream
);
errno_t _wfreopen(
FILE** pFile,
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
パラメーター
[出力] pFile
呼び出しが提供されるファイル ポインターへのポインター。[入力] path
新しいファイル パス。[入力] mode
アクセス許可の種類。[入力] stream
FILE 構造体へのポインター。
戻り値
これらの関数はエラー コードを返します。エラーが発生した場合、元のファイルは閉じられます。
解説
freopen_s 関数は、現在 stream に関連付けられたファイルを閉じ、path._wfreopen_s で指定されたファイルに stream をです _freopen_sのワイド文字バージョンの再割り当てします; _wfreopen_s への path と mode の引数はワイド文字列です。それ以外では、_wfreopen_s と _freopen_s の動作は同じです。
pFile、path、mode、または stream のいずれかに NULLであるか、または path が空の文字列の場合、これらの関数は パラメーターの検証に説明されているように、無効なパラメーター ハンドラーが実行されます。実行の継続が許可された場合、これらの関数は errno を EINVAL に設定し、EINVAL を返します。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
freopen_s は、通常、ユーザーが指定したファイルに既に開いているファイル stdin、stdoutと stderr のリダイレクトに使用されます。stream に関連付けられているファイルに要求するアクセスの種類を指定する文字列である新しいファイルが modeと次のように開かれます:
"r"
読み取り用に開きます。ファイルが存在しない場合や見つからない場合、freopen_s 呼び出しは失敗します。"w"
書き込み用に空のファイルを開きます。指定したファイルが既に存在すると、そのファイルの内容は破棄されます。"a"
ファイルに新しいデータを書き込む前に EOF マーカーを削除せずにファイル (追加) の末尾に書き込み用に開きます; あるファイルを作成します。"r+"
読み取りと書き込みの両方のモードで開きます。ファイルが存在している必要があります。"w+"
読み取りと書き込みの両方のモードで空のファイルを開きます。指定したファイルが既に存在すると、そのファイルの内容は破棄されます。"a+"
読み取りと追加のオープン; 追加操作を書き込むことが完了したら、新しいデータをファイルに書き込む EOF マーカーを復元する前に EOF マーカーが削除が含まれ、; あるファイルを作成します。
既存のファイルを破棄できるように、"w" と "w+" の型を考慮して使用します。
ファイルが "a" または "a+" のアクセスの種類を開くと、すべての書き込み操作はファイルの末尾に発生します。ファイル ポインターが fseek か rewindを使用して位置を変更できますが、ファイル ポインターはファイルの末尾まで、書き込み操作の前に常に実行されます。したがって、既存のデータは上書きされません。
"a" モードでは、ファイルへの追加の前に EOF マーカーは削除されません。追加が行われても、MS-DOS TYPE コマンドでは元の EOF マーカーまでのデータしか表示されず、ファイルに追加されたデータは表示されません。"a+" モードでは、ファイルへの追加の前に EOF マーカーが削除されます。追加が終了すると、MS-DOS の TYPE コマンドでファイル内すべてのデータが表示されます。Ctrl + Z EOF マーカーで終了するストリーム ファイルに追加するには、"a+" モードを使用する必要があります。
"r+","w+","a+" かのアクセスの種類を指定すると、読み取りと書き込みの両方ができます (ファイルは "更新" モードで開きます)。ただし、読み取りと書き込みを切り替える場合は、その間の fsetpos、fseek、または 巻き戻し 操作する必要があります。必要に応じて、fsetpos 関数または fseek 関数には現在位置を指定できます。上記の値に加え改行文字の変換モードを指定するには、次の文字の 1 つが mode の文字列に含まれている場合があります。
t
テキスト (変換) モードで開きます。; キャリッジ return–linefeed (CR-LF) の改行の組み合わせは、入力 (LF) の一つの文字に変換されます; LF 文字が出力の CR-LF の組み合わせに変換されます。また、Ctrl + Z は入力のファイルの終端の文字として解釈されます。ファイルおよび削除の最後に読み取ること、または Ctrl の "a+"、ランタイム ライブラリの検査と書き込み、読み取りのために開くファイルの場合、可能であれば。これは fseek と ftell を使用すると、ファイル内で実行されるのに fseek はファイルの末尾付近で不適切にされるためです。t の[ANSI 互換が必要な場合は使用しない Microsoft の拡張機能です。b
バイナリ (無変換) モードで開きます。; 上記の変換は行われませんされます。
t または b を mode に指定しないと、既定の変換モードは _fmode グローバル変数によって定義されます。t または b を引数の先頭に指定すると、エラーが発生して NULL が返されます。
テキストと binary モードの詳細については、テキストと Binary モードは、I/O を格納します。を参照してください。
必要条件
Function |
必須ヘッダー |
---|---|
freopen_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> または <wchar.h> |
コンソールは Windows ストア の apps ではサポートされていません。コンソール、stdin、stdout、および stderrに関連付けられている標準ストリームのハンドルは C のランタイム関数が Windows ストア の apps で使用する前にをリダイレクトする必要があります。互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_freopen_s.c
// 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 )
{
errno_t err;
// Reassign "stderr" to "freopen.out":
err = freopen_s( &stream, "freopen.out", "w", stderr );
if( err != 0 )
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" );
}
同等の .NET Framework 関数
System::IO::FileStream::FileStream