C 語言透過 FILE* 指標操作檔案,FILE 實為結構體,封裝緩衝區、位置指標、錯誤旗標等。
FILE *fp = fopen("filename", "mode");
// 或
FILE *fp;
fp = fopen("filename", "mode");
用完必須 fclose(fp) 釋放資源,良好習慣。
| 模式 | 說明 |
|---|---|
r | 唯讀,檔案必須存在 |
w | 寫入,截斷或建新 |
a | 附加,建新或寫入尾端 |
r+ | 讀寫,檔案必須存在 |
b | 二進位模式(如 rb wb) |
if ((fp = fopen("file.txt", "r")) == NULL) {
perror("Open failed");
return -1;
}
fgetc() 回傳 EOF (-1)feof(fp),因資料可能含 0xFFint ch = fgetc(fp); // 讀取,含空白、換行
fputc(ch, fp); // 寫入
// 巢狀用法
fputc(fgetc(in), out);
回傳值:成功回傳字元,失敗回傳 EOF。
size_t fread(void *buf, size_t size, size_t count, FILE *fp);
size_t fwrite(const void *buf, size_t size, size_t count, FILE *fp);
buf:資料緩衝區位址size:單一元素位元組數count:元素個數注意:buf 空間必須 ≥ size * count。文字檔使用可能因換行轉換導致位元組數不符預期。
putw(10, fp); // 寫入 int(二進位)
int x = getw(fp); // 讀取 int,失敗回傳 -1
純二進位操作,文字編輯器開啟會顯示亂碼。
fread/fwrite,文字用 fgets/fprintfmmap 或分塊處理作者:shimachao