本文目錄一覽:
C語言 文件指針 fseek
fptr = fopen(roominfo, “rb+”); //你的文件是以讀寫方式打開的
當一個文件以讀寫方式打開,從讀文件切換到寫文件或者相反操作,必須刷新文件緩衝區(就是把文件的修改寫入磁碟),而fseek操作會引發文件緩衝區的刷新。在你的代碼里fwrite以後,下次判斷是fread,所以如果不刷新文件緩衝區,fread不會讀取到寫入的數據,而fseek(fptr, 0,SEEK_CUR);就是在不移動文件指針的情況下,把緩衝區數據寫入文件,保證fread會讀取到新數據,這是常用手段
在C語言中fseek()的功能
fseek()是重定位流(數據流/文件)上的文件內部位置指針。
注意:文件指針指向文件/流。位置指針指向文件內部的位元組位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變或指向別的文件。
如果執行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個位元組的位置,函數返回0。如果執行失敗(比如offset取值大於等於2*1024*1024*1024,即long的正數範圍2G),則不改變stream指向的位置,函數返回一個非0值。
擴展資料:
注意事項
fseek函數的文件指針,應該為已經打開的文件。如果沒有打開的文件,那麼將會出現錯誤。 fseek函數也可以這樣理解,相當於在文件當中定位。
這樣在讀取規律性存儲文件時可以利用其OFFSET偏移量讀取文件上任意的內容。
fseek函數一般用於二進位文件,也可以用於文本文件。用於文本文件操作時,需特別注意只有fseek(fp, 0, SEEK_SET) 和 fseek(fp, ftell(fp), SEEK_SET)能確保結果符合預期。
參考資料來源:百度百科-fseek
C語言fseek 問題
#include stdio.h
int main(void) {
FILE *stream;
int c,n = 0,filesize;
stream = fopen(“MYFILE.TXT”, “wt”);
fprintf(stream, “This is a test\n”);
fclose(stream);
stream = fopen(“MYFILE.TXT”, “r+”);
while(n 4) {
filesize = 0;
while((c = fgetc(stream)) != EOF) {
printf(“%c”,c);
++filesize;
}
fseek(stream,-(++filesize),SEEK_CUR);
fseek(stream,0,SEEK_CUR);
++n;
}
fclose(stream);
return 0;
}
***** fseek(stream,0,SEEK_CUR); *****
這一句很重要(專家說的),用來改變文件的讀狀態(我也不明白這個狀態),在修改數據文件時,這一句貌似廢話的話所起的作用更是重要了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246744.html