以二進制模式("rb"/"wb")打開源文件與目標文件,逐字節讀取源文件並寫入目標文件,直到 EOF。此法適用於**任意文件類型**(文本、圖片、可執行文件等),也是遠程文件傳輸的基礎邏輯。
void* 指針與 char 類型佔用 1 字節,適合作為字節緩衝區。char 可存放任意 8 位模式(256 種可能),非僅限字符。void* 緩衝區void *buf;
while (!feof(fp_src)) {
fread(&buf, 1, 1, fp_src); // 讀 1 字節到 buf
fwrite(&buf, 1, 1, fp_dst); // 寫 1 字節從 buf
}
char 緩衝區(推薦)char c;
while (!feof(fp_src)) {
fread(&c, 1, 1, fp_src);
fwrite(&c, 1, 1, fp_dst);
}
#includeint main() { FILE *fp_src = fopen("a.png", "rb"); FILE *fp_dst = fopen("b.png", "wb"); if (!fp_src || !fp_dst) return -1; char c; while (!feof(fp_src)) { fread(&c, 1, 1, fp_src); fwrite(&c, 1, 1, fp_dst); } fclose(fp_src); fclose(fp_dst); printf("over\n"); return 0; }
逐字節調用 fread/fwrite 開銷大。實際項目建議:
char buf[4096];size_t n = fread(buf, 1, sizeof(buf), fp_src);fwrite(buf, 1, n, fp_dst);n == 0。若需確保目標文件大小**完全等於**源文件(避免多讀多寫),可先獲取源文件大小:
fseek(fp_src, 0, SEEK_END); long fsize = ftell(fp_src); fseek(fp_src, 0, SEEK_SET); // 然後分塊讀寫,最後一塊精確控制長度
二進制逐字節復制是 C 語言文件操作基礎,掌握 fread/fwrite 配合 char 緩衝區的模式,並理解「類型不限制內容」的指針本質,可構建任意文件復制、傳輸、備份工具。生產環境務必使用塊讀寫優化性能。