#include
int main() {
FILE *src = fopen("1.tar.gz", "rb"); // 二進制讀取
FILE *dst = fopen("2.tar.gz", "wb"); // 二進制寫入
if (!src || !dst) { perror("文件打開失敗"); return 1; }
int ch;
while ((ch = getc(src)) != EOF) { // 逐字節讀取
putc(ch, dst); // 逐字節寫入
}
fclose(dst);
fclose(src);
return 0;
}
"rb"/"wb" 關鍵於 Windows 平台,防止 \n ↔ \r\n 轉換損壞二進制文件(如圖片、壓縮包)。getc 返回 int 而非 char,為了區分有效字符 0xFF 與 EOF(通常為 -1)。fread/fwrite 批量操作(如 4KB 塊)。fopen 返回值;複製後可對比文件大小/校驗和驗證完整性。#define BUFSIZE 8192
char buf[BUFSIZE];
size_t n;
while ((n = fread(buf, 1, BUFSIZE, src)) > 0) {
fwrite(buf, 1, n, dst);
}
系統調用減少 8000 倍,速度提升數量級。
掌握 getc/putc 基礎模型是理解文件 I/O 的起點;實際工程中務必使用緩衝區拷貝並完善錯誤處理。