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

C 指標筆記(六):檔案指標操作——開啟/讀寫/定位/合併有序檔案

     編輯:關於C語言

FILE 結構與檔案指標

FILE *fp;                      // 檔案指標
fp = fopen("data.txt", "r");   // 開啟,模式:r/w/a/r+/w+/a+/rb/wb...
if (!fp) { perror("open"); exit(1); }

核心操作函數族

類別函數說明
字元fgetc/fputc單字元讀寫
fgets/fputs行讀寫(含 \n)
格式化fscanf/fprintf類 scanf/printf
fread/fwrite二進位區塊讀寫
定位fseek/rewind/ftell隨機存取
狀態feof/ferror檢測結束/錯誤

範例 1:檔案複製(字元級)

int main(int argc, char *argv[]) {
    if (argc != 3) return 1;
    FILE *fr = fopen(argv[1], "r"), *fw = fopen(argv[2], "w");
    int ch;
    while ((ch = fgetc(fr)) != EOF) fputc(ch, fw);
    fclose(fr); fclose(fw);
    return 0;
}

範例 2:合併兩個已排序整數檔(二進位)

int main(int argc, char *argv[]) {
    if (argc != 4) return 1;
    FILE *f1 = fopen(argv[1], "rb"), *f2 = fopen(argv[2], "rb"), *f3 = fopen(argv[3], "wb");
    int x, y;
    fread(&x, sizeof(int), 1, f1);
    fread(&y, sizeof(int), 1, f2);
    while (!feof(f1) && !feof(f2)) {
        if (x < y) { fwrite(&x, sizeof(int), 1, f3); fread(&x, sizeof(int), 1, f1); }
        else       { fwrite(&y, sizeof(int), 1, f3); fread(&y, sizeof(int), 1, f2); }
    }
    while (!feof(f1)) { fwrite(&x, sizeof(int), 1, f3); fread(&x, sizeof(int), 1, f1); }
    while (!feof(f2)) { fwrite(&y, sizeof(int), 1, f3); fread(&y, sizeof(int), 1, f2); }
    fclose(f1); fclose(f2); fclose(f3);
    return 0;
}

關鍵提醒

  • 二進位模式 rb/wb 避免換行符轉換;
  • fread/fwrite 回傳實際讀寫**項目數**,而非位元組數;
  • 檔案結束判斷:讀取函數回傳 0 或 feof(fp) 為真;
  • 隨機存取:fseek(fp, offset, SEEK_SET/CUR/END)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved