檔案操作是 C 語言持久化資料的關鍵機制。本文系統整理檔案概念、資料流模型、兩種存取方式、文字/二進位檔案差異、緩衝區機制、檔案指標結構,為後續 fopen/fread/fwrite/fseek 等 API 奠定堅實理論基礎。
C 語言將所有輸入輸出裝置(鍵盤、螢幕、磁碟、網路)統一視為資料流:
EOF 或檔案結束標記此抽象層使程式碼與具體硬體解耦,同一組 API 可操作不同裝置。
| 方式 | 特點 | 適用場景 |
|---|---|---|
| 循序存取 | 必須從檔案開頭開始,依序讀寫;欲存取第 n 位元組,須先處理前 n-1 位元組 | 文字檔、日誌、串流資料 |
| 隨機存取 | 可透過 fseek 指定位元組偏移量,直接跳轉讀寫 | 資料庫索引、大型二進位檔、多媒體檔案 |
printf)scanf)int 佔 2/4 位元組,float 佔 4 位元組,結構體按記憶體佈局連續寫入ANSI C 規定系統為每個檔案建立記憶體緩衝區:
此機制大幅減少系統呼叫次數,提升 I/O 效能。fflush 可強制刷新輸出緩衝區。
FILE *fp 是指向內部結構體 FILE 的指標,該結構體封裝:
定義於 <stdio.h>,使用者無需關心內部細節,僅透過指標傳遞給 API 即可。
FILE *fp1, *fp2; // 宣告兩個檔案指標
fp1 = fopen("data.txt", "r");
fp2 = fopen("data.bin", "wb");
掌握「資料流抽象、存取方式選擇、文字/二進位差異、緩衝區運作、FILE 指標角色」五大核心觀念,即能靈活運用 C 標準庫進行高效、可攜式的檔案操作開發。