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

C/C++ 二進制檔案隨機存取完整指南:fseek、fread、fwrite 實戰

     編輯:VC 教學

檔案操作基礎 API

函數用途
fopen開啟檔案,指定模式(讀/寫、二進制/文字)
fclose關閉檔案
fread讀取資料
fwrite寫入資料
fseek/fsetpos移動檔案指標至任意位置
ftell/fgetpos取得目前檔案指標位置

隨機存取意指可在檔案任意位置間跳轉讀寫,無需循序掃描。本文聚焦二進制檔案(位元組流),文字檔隨機存取較少用。

二進制檔案特性

  • 位元組值 0~255,無特殊控制碼(文字檔有 CR/LF/EOF)
  • 視為位元組陣列或資料流,隨機存取相當於陣列下標訪問

範例一:寫入字串到二進制檔案

#include <stdio.h> <string.h>
int main() {
    const char *filename = "test.txt";
    const char *mytext = "Once upon a time there were three bears.";
    FILE *ft = fopen(filename, "wb"); // 二進制寫入模式
    if (ft) {
        fwrite(mytext, sizeof(char), strlen(mytext), ft);
        fclose(ft);
    }
    printf("len = %d", strlen(mytext));
    return 0;
}

證明二進制檔案可存放文字資料,關鍵在於開啟模式 "wb"。

進階應用:結構體陣列的隨機讀寫

struct Record { int id; char name[32]; float score; };
Record recs[100];
FILE *fp = fopen("data.dat", "wb+");
// 寫入第 5 筆
fseek(fp, 4 * sizeof(Record), SEEK_SET);
fwrite(&recs[4], sizeof(Record), 1, fp);
// 讀取第 10 筆
fseek(fp, 9 * sizeof(Record), SEEK_SET);
fread(&recs[9], sizeof(Record), 1, fp);
fclose(fp);

利用 fseek 計算位移實現 O(1) 存取,適合資料庫索引、大型資料集處理。

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