名稱空間
變體
操作

std::fopen

來自 cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
定義於標頭檔案 <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