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」的按鈕)。 然而,在中,當您在讀取和寫入之間,必須有介入的 fsetpos、 fseek或 回溯 作業。 如果需要目前位置可以為 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 對等用法
System::IO::FileStream::FileStream