| 分類 | 函數 | 功能 |
|---|---|---|
| 流控制 | fopen() | 打開流,返回 FILE* |
fclose() | 關閉流,刷新緩衝區 | |
| 字符操作 | fputc() | 寫單字符 |
fgetc() | 讀單字符,返回 int 以容納 EOF | |
fputs() | 寫字符串(不含結束符) | |
fgets() | 讀一行或指定長度,保留換行符 | |
| 格式化操作 | fprintf() | 格式化輸出到流 |
fscanf() | 格式化從流讀取 | |
| 隨機訪問 | fseek() | 定位到指定偏移量 |
rewind() | 重置到文件開頭 | |
ftell() | 獲取當前位置 | |
| 狀態檢查 | feof() | 到達文件末尾返回非零 |
ferror() | 發生錯誤返回非零 | |
| 二進制塊操作 | fread() | 讀指定數量數據塊 |
fwrite() | 寫指定數量數據塊 | |
| 臨時文件 | tmpfile() | 創建二進制臨時文件,自動刪除 |
tmpnam() | 生成唯一文件名 | |
| 文件管理 | remove() | 刪除文件 |
#include <stdio.h>
#include <string.h>
int main(void) {
FILE *fp = NULL;
const char *filename = "D:/1.txt"; // 跨平台建議用正斜杠或雙反斜杠
char buf[] = "alkdjlkfjdlkjfodijfoidjdijfkldjfk";
fp = fopen(filename, "a+"); // 追加讀寫,文件不存在則創建
if (fp == NULL) {
perror("fopen failed");
return 1;
}
for (size_t i = 0; i < strlen(buf); ++i) {
if (fputc(buf[i], fp) == EOF) {
perror("fputc failed");
break;
}
}
fclose(fp);
return 0;
}
#include <stdio.h>
int main(void) {
FILE *fp = fopen("D:/1.txt", "r");
if (fp == NULL) {
perror("fopen failed");
return 1;
}
int ch;
while ((ch = fgetc(fp)) != EOF) { // 必須用 int 接收以區分 EOF 與有效字符
putchar(ch);
}
if (ferror(fp)) {
perror("read error");
}
fclose(fp);
return 0;
}
| 模式 | 含義 | 文件不存在 | 文件存在 | 定位 |
|---|---|---|---|---|
r | 只讀 | 失敗 | 保留內容 | 開頭 |
w | 只寫 | 創建 | 截斷為 0 | 開頭 |
a | 追加寫 | 創建 | 保留內容 | 末尾 |
r+ | 讀寫 | 失敗 | 保留內容 | 開頭 |
w+ | 讀寫 | 創建 | 截斷為 0 | 開頭 |
a+ | 讀寫追加 | 創建 | 保留內容 | 末尾 |
二進制模式在後加 b(如 rb、wb),Windows 下影響換行符轉換。
char 接收會導致 EOF(-1)與有效字符 0xFF 混淆while ((ch = fgetc(fp)) != EOF)Windows 接受正斜杠 / 作為路徑分隔符,建議統一使用正斜杠或雙反斜杠 \\\\,避免轉義字符陷阱。