std::fopen
來自 cppreference.com
定義於標頭檔案 <cstdio> |
||
std::FILE* fopen( const char* filename, const char* mode ); |
||
開啟由 filename 指定的檔案,並返回與該檔案關聯的檔案流。mode 用於確定檔案訪問模式。
目錄 |
[edit] 引數
filename | - | 要將檔案流關聯到的檔名 |
mode | - | 確定檔案訪問模式的空終止字串 |
[edit] 檔案訪問標誌
檔案訪問 模式字串 |
含義 | 解釋 | 檔案 已存在時的操作 |
檔案 不存在時的操作 |
---|---|---|---|---|
"r" | 讀取 | 開啟檔案進行讀取 | 從頭開始讀取 | 返回 NULL 並設定錯誤 |
"w" | 寫入 | 建立檔案進行寫入 | 銷燬內容 | 建立新檔案 |
"a" | 追加 | 追加到檔案 | 寫入到末尾 | 建立新檔案 |
"r+" | 讀取擴充套件 | 開啟檔案進行讀/寫 | 從頭開始讀取 | 返回 NULL 並設定錯誤 |
"w+" | 寫入擴充套件 | 建立檔案進行讀/寫 | 銷燬內容 | 建立新檔案 |
"a+" | 追加擴充套件 | 開啟檔案進行讀/寫 | 寫入到末尾 | 建立新檔案 |
檔案訪問模式標誌 "b" 可以選擇性地指定以二進位制模式開啟檔案。此標誌在 POSIX 系統上沒有影響,但在 Windows 上,它會停用對 '\n' 和 '\x1A' 的特殊處理。 在追加檔案訪問模式下,無論檔案位置指示器的當前位置如何,資料都將寫入檔案末尾。 | ||||
檔案訪問模式標誌 "x" 可以選擇性地附加到 "w" 或 "w+" 指定符。此標誌強制函式在檔案存在時失敗,而不是覆蓋它。(C++17) | ||||
如果模式不是上面列出的字串之一,則行為未定義。一些實現定義了額外支援的模式(例如 Windows)。 |
[edit] 返回值
如果成功,返回指向控制開啟檔案流的物件的指標,eof 和 error 位都被清除。除非 filename 指的是互動式裝置,否則流是完全緩衝的。
如果出錯,返回空指標。POSIX 要求在這種情況下設定 errno。
[edit] 注意
filename 的格式是實現定義的,不一定指代檔案(例如,它可能是控制檯或透過檔案系統 API 可訪問的另一個裝置)。在支援它們的平臺上,filename 可能包含絕對或相對檔案系統路徑。
有關可移植的目錄和檔案命名,請參閱 C++ 檔案系統庫或 boost.filesystem。
[edit] 示例
執行此程式碼
#include <cstdio> #include <cstdlib> int main() { int is_ok = EXIT_FAILURE; FILE* fp = std::fopen("/tmp/test.txt", "w+"); if (!fp) { std::perror("File opening failed"); return is_ok; } int c; // Note: int, not char, required to handle EOF while ((c = std::fgetc(fp)) != EOF) // Standard C I/O file reading loop std::putchar(c); if (std::ferror(fp)) std::puts("I/O error when reading"); else if (std::feof(fp)) { std::puts("End of file reached successfully"); is_ok = EXIT_SUCCESS; } std::fclose(fp); return is_ok; }
輸出
End of file reached successfully
[edit] 另請參閱
關閉檔案 (function) | |
將輸出流與實際檔案同步 (function) | |
用不同的名稱開啟一個現有流 (function) | |
C 文件 for fopen
|