C語言通過 FILE* 指針操作文件。fopen 函數根據模式字符串決定打開方式,常見 12 種模式如下:
| 模式 | 含義 |
|---|---|
| rt | 只讀打開文本文件 |
| wt | 只寫建立/截斷文本文件 |
| at | 追加寫入文本文件 |
| rb | 只讀打開二進制文件 |
| wb | 只寫建立/截斷二進制文件 |
| ab | 追加寫入二進制文件 |
| rt+ | 讀寫打開文本文件 |
| wt+ | 讀寫建立/截斷文本文件 |
| at+ | 讀寫打開文本文件,寫入追加 |
| rb+ | 讀寫打開二進制文件 |
| wb+ | 讀寫建立/截斷二進制文件 |
| ab+ | 讀寫打開二進制文件,寫入追加 |
關鍵區別:文本模式(t)會進行換行符轉換,二進制模式(b)不轉換,跨平台時建議顯式指定。
| 類別 | 函數 | 用途 |
|---|---|---|
| 字符 | fgetc / fputc | 單字符讀寫 |
| 格式化 | fscanf / fprintf | 按格式讀寫 |
| 數據塊 | fread / fwrite | 二進制塊讀寫,高效 |
| 字符串 | fgets / fputs | 按行讀寫字符串 |
下面示例演示:創建文件、寫入數據、讀取數據、關閉文件,並包含錯誤處理。
#include#include #include #define FILENAME "data.bin" #define BUFSIZE 1024 int main() { FILE *fp = NULL; char write_buf[] = "Hello, C File I/O!\nBinary data: \x01\x02\x03\x04"; char read_buf[BUFSIZE]; size_t bytes; /* 1. 二進制寫入 */ fp = fopen(FILENAME, "wb"); if (!fp) { perror("fopen wb failed"); return EXIT_FAILURE; } bytes = fwrite(write_buf, 1, sizeof(write_buf), fp); printf("寫入 %zu 字節\n", bytes); fclose(fp); /* 2. 二進制讀取 */ fp = fopen(FILENAME, "rb"); if (!fp) { perror("fopen rb failed"); return EXIT_FAILURE; } bytes = fread(read_buf, 1, BUFSIZE - 1, fp); read_buf[bytes] = '\0'; printf("讀取 %zu 字節: %s\n", bytes, read_buf); fclose(fp); /* 3. 文本模式追加演示 */ fp = fopen("log.txt", "at"); if (fp) { fprintf(fp, "[LOG] %s", "操作完成\n"); fclose(fp); } return EXIT_SUCCESS; }
fclose 釋放資源,刷新緩衝區fread/fwrite,避免格式化解析開銷fseek/ftell 定位,配合 rewind 復位/ 或雙反斜杠 \\\\掌握文件模式選擇、讀寫函數分類與錯誤處理,是 C 語言文件操作的基石。實際開發中,根據數據類型(文本/二進制)、訪問模式(順序/隨機)選擇合適 API,能顯著提升程序健壯性與性能。