名稱空間
變體
操作

std::freopen

來自 cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
定義於標頭檔案 <cstdio>
std::FILE* freopen( const char* filename, const char* mode, std::FILE* stream );

首先,嘗試關閉與 stream 關聯的檔案,忽略任何錯誤。然後,如果 filename 不為 null,則嘗試使用 mode 開啟由 filename 指定的檔案,就像透過 std::fopen 一樣,並將該檔案與由 stream 指向的檔案流關聯。如果 filename 是一個空指標,則函式嘗試重新開啟已與 stream 關聯的檔案(在這種情況下允許哪些模式更改是實現定義的)。

目錄

[編輯] 引數

filename - 要將檔案流關聯到的檔名
mode - 確定新的檔案訪問模式的以 null 結尾的字串
stream - 要修改的檔案流

[編輯] 檔案訪問標誌

檔案訪問
模式字串
含義 解釋 檔案
已存在時的操作
檔案
不存在時的操作
"r" 讀取 開啟檔案進行讀取 從頭開始讀取 返回 NULL 並設定錯誤
"w" 寫入 建立檔案進行寫入 銷燬內容 建立新檔案
"a" 追加 追加到檔案 寫入到末尾 建立新檔案
"r+" 讀取擴充套件 開啟檔案進行讀/寫 從頭開始讀取 返回 NULL 並設定錯誤
"w+" 寫入擴充套件 建立檔案進行讀/寫 銷燬內容 建立新檔案
"a+" 追加擴充套件 開啟檔案進行讀/寫 寫入到末尾 建立新檔案
檔案訪問模式標誌 "b" 可選地指定為以二進位制模式開啟檔案。此標誌在 POSIX 系統上沒有影響,但在 Windows 上,例如,它停用對 '\n''\x1A' 的特殊處理。
在追加檔案訪問模式下,無論檔案位置指示器的當前位置如何,資料都將寫入檔案末尾。
檔案訪問模式標誌 "x" 可選地追加到 "w""w+" 說明符。如果檔案存在,此標誌強制函式失敗,而不是覆蓋它。(C++17)
如果模式不是上面列出的字串之一,則行為是未定義的。某些實現定義了額外的支援模式(例如 Windows)。

[編輯] 返回值

成功時為 stream,失敗時為空指標。

[編輯] 注意

std::freopen 是改變流的窄/寬方向的唯一方法,一旦它透過 I/O 操作或 std::fwide 建立。

filename 為空指標時,Microsoft CRT 版本的 std::freopen 不支援任何模式更改,並將其視為錯誤(參見文件)。一種可能的解決方法是非標準函式 _setmode()

[編輯] 示例

以下程式碼將 stdout 重定向到一個檔案。

#include <cstdio>
 
int main()
{
    std::printf("stdout is printed to console\n");
    if (std::freopen("redir.txt", "w", stdout))
    {
        std::printf("stdout is redirected to a file\n"); // this is written to redir.txt
        std::fclose(stdout);
    }
}

輸出

stdout is printed to console

[編輯] 另請參閱

開啟檔案
(函式) [編輯]
關閉檔案
(函式) [編輯]
C 文件 關於 freopen