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 是空字串,這些函式叫用無效的參數處理常式,如 參數驗證中所述。如果執行允許繼續, EINVAL 和 NULL傳回的這些函式設定的 errno 。

如需更多關於這些和其他回傳碼的資訊,請參閱 _doserrno 、 errno 、 _sys_errlist 和 _sys_nerr (_doserrno, errno, _sys_errlist, and _sys_nerr)

備註

這些函式更安全的版本,請參閱 freopen_s, _wfreopen_s

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

泛用文字常式對應

TCHAR.H 常式

未定義 _UNICODE & _MBCS

已定義 _MBCS

已定義 _UNICODE

_tfreopen

freopen

freopen

_wfreopen

freopen 通常用來將目前開啟的檔案 stdin、 stdout和 stderr 使用者重新導向至指定的檔案。新檔案與 stream 如下以 mode開啟*,* 是指定存取的類型字串要求檔案,例如:

  • "r"
    開啟進行讀取、。如果檔案不存在或找不到, freopen 呼叫失敗。

  • "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

<stdio.h>

_wfreopen

<stdio.h> 或 <wchar.h>

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

.NET Framework 對等用法

請參閱

參考

資料流 I/O

fclose _fcloseall

_fdopen _wfdopen

_fileno

fopen _wfopen

_open _wopen

_setmode