首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 流式檔案操作完整指南:FILE 結構、核心 API 表與現代 iostream/fstream 替代方案

     編輯:C++ 入門

C 風格 FILE 結構與核心 API

FILE 為 stdio.h 定義的不透明結構,封裝檔案描述符、緩衝區、狀態旗標等。所有操作透過 FILE* 進行。

FILE 結構關鍵欄位 (實作相關)


typedef struct {
    int level;              // 緩衝區填充層級
    unsigned flags;         // 檔案狀態旗標
    char fd;                // 檔案描述符
    unsigned char hold;     // ungetc 緩衝字元
    int bsize;              // 緩衝區大小
    unsigned char* buffer;  // 資料傳輸緩衝區
    unsigned char* curp;    // 當前作用指標
    unsigned istemp;        // 臨時檔案指示
    short token;            // 有效性檢查
} FILE;

核心 API 分類速查表

分類函數功能
開啟/關閉fopen()開啟流,返回 FILE*
fclose()關閉流,刷新緩衝
字元操作fputc()寫單一字元
fgetc()讀單一字元
定位fseek()移動檔案指標
rewind()重置至檔案開頭
字串操作fputs()寫字串
fgets()讀一行或指定字元數
格式化fprintf()格式化輸出
fscanf()格式化讀取
狀態檢查feof()檢測檔案結尾
ferror()檢測錯誤
區塊讀寫fread()讀指定字元數
fwrite()寫指定字元數
臨時檔案tmpfile()建立臨時檔案流
tmpnam()產生唯一檔名
刪除remove()刪除檔案

現代 C++ 替代方案:iostream / fstream (強烈推薦)

輸出檔案


#include 
#include 

void write_file() {
    std::ofstream ofs("data.txt");
    if (!ofs) throw std::runtime_error("Open failed");
    ofs << "Hello " << 42 << '\n';
    ofs << std::fixed << std::setprecision(2) << 3.14159;
    // RAII:ofs 解構自動 close、flush
}

輸入檔案


void read_file() {
    std::ifstream ifs("data.txt");
    std::string line;
    while (std::getline(ifs, line)) {  // 正確迴圈模式
        process(line);
    }
    // 格式化讀取
    int a; double b;
    if (ifs >> a >> b) { /* ... */ }
}

二進位模式


std::ofstream ofs("data.bin", std::ios::binary);
std::vector vec = {1,2,3,4,5};
ofs.write(reinterpret_cast(vec.data()), vec.size() * sizeof(int));

std::ifstream ifs("data.bin", std::ios::binary);
ifs.read(reinterpret_cast(vec.data()), vec.size() * sizeof(int));

C vs C++ 檔案操作對比

維度C (FILE*)C++ (fstream)
型別安全無 (格式字串)完整 (運算子重載)
資源管理手動 fcloseRAII 自動
例外安全困難天然支援
可擴充性無自訂型別重載 << / >>
效能略高 (無格式解析)可關閉同步 sync_with_stdio(false)
跨平台標準 C標準 C++

遷移建議

  1. 新代碼優先使用 fstream
  2. 舊代碼維護:FILE* 可轉換為 std::FILE* 繼續使用
  3. 高效能二進位大量讀寫:考慮 mmap/ReadFile/fread + 手動緩衝
  4. 混用時:std::ios::sync_with_stdio(false) 解耦 C/C++ 流緩衝

C++ fstream 以 RAII、型別安全、例外安全、可擴充性全面優於 C FILE*。僅在極度效能敏感、或介接 C 庫時保留 C 風格。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved