標準庫提供 fwrite() 與 fread() 以區塊方式處理二進位資料,適合陣列、結構等大量資料的高效存取。
#include <stdio.h>
int main(void) {
float f[6] = {3.2, -4.34, 25.04, 0.1, 50.56, 80.5};
FILE *fp = fopen("test_b.dat", "wb");
if (!fp) return 1;
fwrite(f, sizeof(float), 6, fp); // 一次寫入 6 個 float
fclose(fp);
return 0;
}
fwrite(ptr, size, count, stream) 將 ptr 指向的記憶體區塊,以 size 位元組為單位,寫入 count 個元素至 stream。
#include <stdio.h>
int main(void) {
FILE *fp = fopen("test_b.dat", "rb");
if (!fp) return 1;
int dat[100];
size_t n = fread(dat, sizeof(int), 100, fp);
if (n != 100) {
if (feof(fp))
printf("End of file\n");
else
printf("Read error\n");
}
fclose(fp);
return 0;
}
讀取時應檢查實際讀取元素數(傳回值),結合 feof() 區分檔案結束與讀取錯誤。
標準 I/O 採用全緩衝:寫入資料先存於輸出緩衝區,滿或呼叫 fclose() 才實際寫入磁碟。若程式異常終止未呼叫 fclose(),資料可能遺失。fflush(FILE *stream) 可強制刷新輸出緩衝區,清除輸入緩衝區,確保資料即時落盤。