在C語言程式設計中,文件操作是持久化數據、實現數據交換的核心技能。本文將系統梳理文件類型、文件指針、核心操作步驟及常用模式,並輔以代碼示例幫助你快速掌握。
根據存儲形式,文件分為二進制文件與文本文件:
簡單判斷:在Mac下將文件拖入記事本,若顯示亂碼則為二進制文件;否則為文本文件。
文件指針實質是指向文件信息結構體的地址,包含文件名、狀態、當前讀寫位置等元數據。定義方式:
FILE *fp;
所有文件操作函數均以f開頭(如fopen、fclose、fputc等)。
fopen()fp = fopen("文件路徑", "操作模式");fp = fopen("/user/wangdi/desktop/haha.txt", "w");fputc(字符ASCII碼, fp); 例:fputc(97, fp); 寫入字符'a'ch = fgetc(fp); 返回字符ASCII碼,遇文件結束返回EOF(通常為-1)while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
注意:中文字符佔多字節,單字節讀取會產生亂碼,實際開發常用fgets/fread處理多字節數據。fclose(fp);fopen必須配對fclose,釋放文件緩衝區,確保數據寫入磁盤。| 模式 | 含義 | 行為 |
|---|---|---|
r | 唯讀 | 文件必須存在,否則返回NULL |
w | 唯寫 | 文件存在則清空(長度歸零),不存在則創建 |
a | 追加 | 文件存在則指針移至末尾,不存在則創建 |
r+/w+/a+ | 讀寫 | 在基礎模式上增加讀寫權限 |
二進制模式在模式字符串後加b(如"rb"、"wb"),Windows下文本/二進制模式換行符處理不同,跨平台建議顯式指定。
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp = fopen("demo.txt", "w+");
if (!fp) { perror("打開失敗"); return 1; }
char *str = "Hello, C File IO!";
for (int i = 0; i < strlen(str); i++) {
fputc(str[i], fp);
}
rewind(fp); // 將文件指針重置到開頭
int ch;
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
putchar('\n');
fclose(fp);
return 0;
}
r+、w+、a+)切換讀寫方向時需插入fflush、fseek、rewind或fsetpos。fread/fwrite按塊處理,避免頻繁系統調用。掌握文件操作核心API與模式選擇,是C語言工程化開發的基本功。建議結合man fopen、man fread等手冊深入理解各函數邊界行為。