共用方式為


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 
);

參數

  • [out] pFile
    對呼叫中提供的檔案指標的指標。

  • [in] path
    新的檔案路徑。

  • [in] mode
    允許存取的型別。

  • [in] stream
    指向 FILE 結構的指標。

傳回值

這些函式都會傳回錯誤碼。如果發生錯誤,原始檔案已關閉。

備註

freopen_s 函式會關閉檔案目前與 stream 並重新指派 stream 到 path. 指定的檔案 _wfreopen_s 。 _freopen_s寬字元版本;為 _wfreopen_s 的 path 和 mode 引數是寬字元字串。_wfreopen_s 和 _freopen_s 其餘行為相同。

如果有 pFile、 path、 mode或 stream 是 NULL,或者,如果 path 是空字串,這些函式叫用無效的參數處理常式,如 參數驗證中所述。如果執行允許繼續, EINVAL 和 EINVAL傳回的這些函式設定的 errno 。

泛用文字常式對應

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 型別命令只會顯示資料由原始 EOF 標記決策和沒有任何資料附加至檔案。"a+" 方法在附加之前移除 EOF 標記加入至檔案。在附加之後, MS-DOS 型別順序檔中的所有資料。"a+" 方法對於附加所終止 CTRL+Z EOF 標記資料流檔案。

當 "r+", 為 "w+", 或 "a+" 存取型別指定時,讀取和寫入允許 (檔案被視為開啟為「Update」的按鈕)。然而,在中,當您在讀取和寫入之間,必須有介入的 fsetposfseek回溯 作業。如果需要目前位置可以為 fsetpos 或 fseek 作業指定。除了上述值之外,下列其中一個字元在 mode 字串可能包含為新行指定版本模式。

  • t
    開啟文字 (轉換) 模式;重設為一組 (CR-LF) 組合轉譯成在輸入的單一新行字元 (LF) 字元;LF 字元轉譯為匯出的 CR-LF 組合。此外, CTRL+Z 是解譯成輸入的檔案結尾字元。如果可以在用來撰寫和讀取開啟以供讀取或檔案與 "a+",執行階段程式庫檢查 CTRL+Z 在檔案結尾,並移除它。因為使用 fseek 和 ftell 在檔案內移動可能造成 fseek 在檔案結尾附近,不正確的行為完成。t 選項不應使用中的 Microsoft Extensions ANSI 可攜性所需的位置。

  • b
    開啟二進位 (未轉譯的) 模式;上述轉譯會隱藏。

如果 t 或 b 是 mode不會重新命名,版本模式的預設是由全域變數 _fmode定義的。如果 t 或 b 前置引數,函式失敗並傳回 NULL。

如需文字和二進位模式的討論,請參閱 文字和二進位模式檔案 I/O

需求

Function

必要的標頭檔

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> 或 <wchar.h>

主控台 Windows 市集 應用程式不支援。標準資料流控制代碼與主控台, stdin, stdout和 stderr,在這種情況下, C 執行階段函式在 Windows 市集 應用程式之前,可以使用它們必須重新導向。如需其他相容性資訊,請參閱入門介紹中的 相容性 (Compatibility)

範例

// 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 對等用法

請參閱

參考

資料流 I/O

freopen _wfreopen

fclose _fcloseall

_fdopen _wfdopen

_fileno

fopen _wfopen

_open _wopen

_setmode