首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言文件複製實現:二進制流逐字節拷貝詳解

     編輯:關於C

核心代碼

#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;
}

關鍵點解析

  1. 二進制模式:"rb"/"wb" 關鍵於 Windows 平台,防止 \n ↔ \r\n 轉換損壞二進制文件(如圖片、壓縮包)。
  2. int 接收 getc:getc 返回 int 而非 char,為了區分有效字符 0xFF 與 EOF(通常為 -1)。
  3. 逐字節 vs 緩衝區:教學清晰但效率低。生產環境建議 fread/fwrite 批量操作(如 4KB 塊)。
  4. 錯誤處理:檢查 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 的起點;實際工程中務必使用緩衝區拷貝並完善錯誤處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved