std::freopen
來自 cppreference.com
定義於標頭檔案 <cstdio> |
||
首先,嘗試關閉與 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
|