| 函數 | 功能 | 典型用途 |
|---|---|---|
| fopen / fclose | 打開/關閉流 | 所有文件操作起止 |
| fgetc / fputc | 單字符讀/寫 | 逐字符處理 |
| fgets / fputs | 字符串/行讀/寫 | 文本行處理 |
| fscanf / fprintf | 格式化讀/寫 | 結構化文本 |
| fread / fwrite | 二進制塊讀/寫 | 高效數據傳輸 |
| fseek / ftell / rewind | 定位/獲取位置/復位 | 隨機訪問 |
| feof / ferror | 檢測 EOF/錯誤 | 循環終止條件 |
| remove / rename | 刪除/重命名 | 文件管理 |
| tmpfile / tmpnam | 臨時文件/唯一名 | 中間數據存儲 |
#include#include int main() { const char *filename = "D:/1.txt"; const char *data = "alkdjlkfjdlkjfodijfoidjdijfkldjfk"; FILE *fp = fopen(filename, "a+"); // 追加讀寫,文件不存在則創建 if (!fp) { perror("fopen"); return 1; } for (size_t i = 0; i < strlen(data); i++) { if (fputc(data[i], fp) == EOF) { perror("fputc"); break; } } fclose(fp); return 0; }
#includeint main() { const char *filename = "D:/1.txt"; FILE *fp = fopen(filename, "r"); if (!fp) { perror("fopen"); return 1; } int ch; while ((ch = fgetc(fp)) != EOF) { putchar(ch); } fclose(fp); return 0; }
t)會轉換換行符,二進制(b)不轉換,跨平台建議顯式指定fflush 強制刷新EOF(通常 -1)表示結束或出錯,需配合 feof/ferror 區分/,推薦統一用正斜杠避免轉義麻煩fseeko/ftello 或 _fseeki64 支持 64 位偏移#include#include #pragma pack(push, 1) struct Record { uint32_t id; char name[32]; double score; }; #pragma pack(pop) int main() { struct Record r = { 1001, "Alice", 98.5 }; FILE *fp = fopen("records.dat", "wb"); fwrite(&r, sizeof(r), 1, fp); fclose(fp); struct Record r2; fp = fopen("records.dat", "rb"); fread(&r2, sizeof(r2), 1, fp); printf("ID:%u Name:%s Score:%.1f\n", r2.id, r2.name, r2.score); fclose(fp); return 0; }
熟練掌握 fopen/fclose、四大類讀寫函數、定位與錯誤檢測,是 C 文件操作的基礎。實際開發中,根據數據特性選擇文本/二進制模式、字符/塊/格式化 API,並做好錯誤處理與資源釋放。