次の方法で共有


freopen_s、_wfreopen_s

ファイル ポインターを再度割り当てます。 これらの freopen、_wfreopen のバージョンは、「CRT のセキュリティ機能」に説明されているように、セキュリティが強化されています。

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. で指定されたファイルに stream を再度関連付けます。_wfreopen_s は _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+" のアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルは「更新」で開いた呼ばれます)。 ただし、読み取りと書き込みを切り替える場合は、その前に fsetposfseek、または rewind のいずれかの関数を実行する必要があります。 必要に応じて、fsetpos 関数または fseek 関数には現在位置を指定できます。 上記の値に加え、mode 文字列に次の文字の 1 つを追加すると、改行の変換モードを指定できます。

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

  • b
    バイナリ (未変換) モードで開き、前述の変換は抑制されます。

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

テキスト モードと binary モードの詳細については、「テキスト モードとバイナリ モードのファイル入出力」を参照してください。

必要条件

関数

必須ヘッダー

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> または <wchar.h>

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

使用例

// 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 関数

参照

関連項目

ストリーム入出力

freopen、_wfreopen

fclose、_fcloseall

_fdopen、_wfdopen

_fileno

fopen、_wfopen

_open、_wopen

_setmode