fseek有三個參數(shù),第1個是文件句柄,通過打開文件時得到;第2個就是移動的字節(jié)數(shù),這個數(shù)可以是正的,就是向后(文件尾部)移動,也可以是負的,即向前(文件頭部)移動;第3個參數(shù)指明從哪里移動,如果寫SEEK_SET就是從文件頭部移動多少字節(jié),如果寫SEEK_END則是從尾部開始移動,SEEK_CUR則是從當前位置移動。
成都創(chuàng)新互聯(lián)始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達十多年累計超上千家客戶的網(wǎng)站建設總結(jié)了一套系統(tǒng)有效的全網(wǎng)推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:成都服務器托管等企業(yè),備受客戶贊揚。
比如
要將文件指針移動到文件開始的第24字節(jié)位置:fseek(fp,24,SEEK_SET);
移動到文件尾部向前50字節(jié):fseek(fp,-50,SEEK_SET);
在當前位置移動8個字節(jié)(跳過8個字節(jié)數(shù)據(jù)):fseek(fp,8,SEEK_CUR);
在當前位置向前移動16個字節(jié)(準備重新讀取數(shù)據(jù)):fseek(fp,-16,SEEK_CUR);
fseek()是重定位流(數(shù)據(jù)流/文件)上的文件內(nèi)部位置指針。
注意:文件指針指向文件/流。位置指針指向文件內(nèi)部的字節(jié)位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變或指向別的文件。
如果執(zhí)行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個字節(jié)的位置,函數(shù)返回0。如果執(zhí)行失敗(比如offset取值大于等于2*1024*1024*1024,即long的正數(shù)范圍2G),則不改變stream指向的位置,函數(shù)返回一個非0值。
擴展資料:
注意事項
fseek函數(shù)的文件指針,應該為已經(jīng)打開的文件。如果沒有打開的文件,那么將會出現(xiàn)錯誤。 fseek函數(shù)也可以這樣理解,相當于在文件當中定位。
這樣在讀取規(guī)律性存儲文件時可以利用其OFFSET偏移量讀取文件上任意的內(nèi)容。
fseek函數(shù)一般用于二進制文件,也可以用于文本文件。用于文本文件操作時,需特別注意只有fseek(fp, 0, SEEK_SET) 和 fseek(fp, ftell(fp), SEEK_SET)能確保結(jié)果符合預期。
參考資料來源:百度百科-fseek
中文文件要用TCHAR之類的多字節(jié)方法處理。
你的方法是把中文看成2進制一個字符一個字符的數(shù)據(jù)文件來處理,也是可以的,fseek工作完全正常,
問題是輸出字符的顯示,你可以顯示每個字節(jié)的值,但不能顯示成肉眼可識別的漢字。
putchar ( ch ); 可用于 ASCII字符。
你可以換成: printf("%02x ", 0xff ch ); 可以顯示單個字節(jié)的碼值。從輸出的碼值可以看出,程序沒有問題,只是不能顯示成肉眼可識別的漢字。
另外,如果是unicode中文文件,則文件頭有不可見的文件類型區(qū)分碼0xfe 0xff 或 0xff 0xfe 等等。
2個單個字節(jié)碼,合成一個雙字節(jié)碼,有大端和小端文件問題,也許需要互相交換相鄰2個字節(jié),再顯示成中文。