功 能
重定位流(數據流/檔案)上的檔案內部位置指針
注意:檔案指針指向檔案/流。位置指針指向檔案內部的位元組位置,隨著檔案的讀取會移動,檔案指針如果不重新賦值將不會改變或指向別的檔案。
頭檔案
#include <stdio.h>
用 法
int fseek(FILE *stream, long offset, int fromwhere);
描 述
函式設定檔案指針stream的位置。如果執行成功,stream將指向以fromwhere(偏移起始位置:檔案頭0(SEEK_SET),當前位置1(SEEK_CUR),檔案尾2(SEEK_END))為基準,偏移offset(指針偏移量)個位元組的位置。如果執行失敗(比如offset超過檔案自身大小),則不改變stream指向的位置。
fseek函式和lseek函式類似,但lseek返回的是一個off_t數值,而fseek返回的是一個整型。
返回值
成功,返回0,失敗返回-1,並設定error的值,可以用perror()函式輸出錯誤。
fseek position the file(檔案) position(位置) pointer(指針) for the file referenced by stream to the byte location calculated by offset.
程式例
int fseek( FILE *stream, long offset, int origin );
第一個參數stream為檔案指針
第二個參數offset為偏移量,正數表示正向偏移,負數表示負向偏移
第三個參數origin設定從檔案的哪裡開始偏移,可能取值為:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 檔案開頭
SEEK_CUR: 當前位置
SEEK_END: 檔案結尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次為0,1和2.
簡言之:
fseek(fp,100L,0);把stream指針移動到離檔案開頭100位元組處;
fseek(fp,100L,1);把stream指針移動到離檔案當前位置100位元組處;
fseek(fp,-100L,2);把stream指針退回到離檔案結尾100位元組處。
使用實例:
注意事項
fseek函式的檔案指針,應該為已經打開的檔案。如果沒有打開的檔案,那么將會出現錯誤。 fseek函式也可以這樣理解,相當於在檔案當中定位。這樣在讀取規律性存儲檔案時可以利用其OFFSET偏移量讀取檔案上任意的內容。
fseek函式一般用於二進制檔案,也可以用於文本檔案。用於文本檔案操作時,需特別注意回車換行的情況:因為在一般瀏覽工具如UltraEdit中,回車換行視為兩個字元0x0D和0x0A,但真實的檔案讀寫和定位時卻按照一個字元0x0A進行處理,因此碰到此類問題時,可以考慮將檔案整個讀入記憶體,然後在記憶體中手工插入0x0D的方法,這樣可以達到較好的處理效果。