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

C 語言文件隨機讀寫技術:fseek/rewind 定位機制與實戰範例

     編輯:關於C語言

順序 vs 隨機讀寫

頂層文件操作預設為順序模式(從頭到尾)。隨機讀寫通過移動文件內部位置指針實現任意位置存取,核心函數:

  • rewind(fp):指針歸零(移至文件開頭)
  • fseek(fp, offset, origin):相對定位

fseek 參數詳解

fseek(FILE *fp, long offset, int origin);
origin 常量數值含義
SEEK_SET0文件開頭
SEEK_CUR1當前位置
SEEK_END2文件結尾

關鍵點:

  • offset 必須為 long 型,常量加後綴 L(如 100L)支援 >64KB 文件
  • 二進制模式("rb"/"wb")定位精確;文本模式因換行符轉換(\r\n↔\n)導致位置計算偏差
  • 定位後常配合 fread/fwrite 進行塊數據讀寫

實戰範例:讀取第二條學生記錄

struct stu { char name[10]; int num, age; char addr[15]; } boy, *qq=&boy;
FILE *fp = fopen("stu_list", "rb");
rewind(fp);
fseek(fp, 1 * sizeof(struct stu), SEEK_SET);  // 跳過第1條
fread(qq, sizeof(struct stu), 1, fp);        // 讀入第2條
printf("%s\t%d\t%d\t%s\n", qq->name, qq->num, qq->age, qq->addr);

邏輯:i=1 表示偏移 1 個結構體大小,落在第二條記錄開頭。

避坑指南

  • 務必用 sizeof(struct stu) 計算偏移,勿手寫常數
  • 打開模式與寫入模式一致(均為二進制)
  • 檢查 fseek 返回值(非 0 表示失敗)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved