頂層文件操作預設為順序模式(從頭到尾)。隨機讀寫通過移動文件內部位置指針實現任意位置存取,核心函數:
rewind(fp):指針歸零(移至文件開頭)fseek(fp, offset, origin):相對定位fseek(FILE *fp, long offset, int origin);
| origin 常量 | 數值 | 含義 |
|---|---|---|
| SEEK_SET | 0 | 文件開頭 |
| SEEK_CUR | 1 | 當前位置 |
| SEEK_END | 2 | 文件結尾 |
關鍵點:
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 表示失敗)