C 語言將文件視為字節流,提供標準庫函數(高層 I/O)與系統調用(低層 I/O)兩套機制操作存儲設備。本文聚焦標準庫 stdio.h 的文件管理 API。
fopen()FILE *fopen(const char *filename, const char *mode);
FILE 結構體包含流控制所需所有信息。常用模式:
| 模式 | 說明 |
|---|---|
r | 唯讀打開現有文本文件 |
w | 寫入,截斷現有或創建新文本文件 |
a | 追加寫入,創建新文本文件 |
r+ | 讀寫現有文本文件 |
w+ | 讀寫,截斷或創建 |
a+ | 讀寫追加,創建新文件 |
二進制文件在模式後加 b:rb、wb、ab、rb+ 等。
fclose()int fclose(FILE *fp);
成功返回 0,失敗返回 EOF。會刷新緩衝區、釋放資源。
| 功能 | 函數 | 說明 |
|---|---|---|
| 寫入字符 | fputc(int c, FILE *fp) | 寫單字符,成功返回字符,失敗返回 EOF |
fputs(const char *s, FILE *fp) | 寫字符串,成功返回非負值,失敗返回 EOF | |
| 讀取字符 | fgetc(FILE *fp) | 讀單字符,返回字符或 EOF |
fgets(char *buf, int n, FILE *fp) | 讀 n-1 字符或至換行/EOF,自動加 '\0' |
格式化 I/O:fprintf()、fscanf()(遇空白停止)。
// 寫入
FILE *fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp);
// 讀取
fp = fopen("/tmp/test.txt", "r");
char buff[255];
fscanf(fp, "%s", buff); // 僅讀 "This"
printf("1: %s\n", buff);
fgets(buff, 255, fp); // 讀剩餘 " is testing..."
printf("2: %s\n", buff);
fgets(buff, 255, fp); // 讀第二行
printf("3: %s\n", buff);
fclose(fp);
fread() / fwrite()size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
適用於數組、結構體等數據塊的高效存取,返回實際讀寫的元素數量。