fseek(file, 0, SEEK_END);
len=ftell(filein);
fseek(file,0,SEEK_SET);
下面,我們來解釋一下fseek()和ftell()是如何工作的。
l fseek()函數
fseek(移動文件流的讀寫位置)
相關函數
rewind,ftell,fgetpos,fsetpos,lseek
表頭文件
#include<stdio.h>
定義函數
int fseek(FILE * stream,long offset,int whence);
函數說明
fseek()用來移動文件流的讀寫位置。參數stream為已打開的文件指針,參數offset為根據參數whence來移動讀寫位置的位移數。
參數
whence為下列其中一種:
SEEK_SET從距文件開頭offset位移量為
新的讀寫位置。SEEK_CUR 以目前的讀寫位置往后增加offset個位移量。
SEEK_END將讀寫位置指向文件尾后再增加offset個位移量。
當whence值為SEEK_CUR 或SEEK_END時,參數offset允許負值的出現。
下列是較特別的使用方式:
1) 欲將讀寫位置移動到文件開頭時:fseek(FILE *stream,0,SEEK_SET);
2) 欲將讀寫位置移動到文件尾時:fseek(FILE *stream,0,0SEEK_END);
返回值
當調用成功時則返回0,若有錯誤則返回-1,errno會存放錯誤代碼。
附加說明
fseek()不像lseek()會返回讀寫位置,因此必須使用ftell()來取得目前讀寫的位置。
l ftell()函數
ftell(取得文件流的讀取位置)
相關函數
fseek,rewind,fgetpos,fsetpos
表頭文件
#include<stdio.h>
定義函數
long ftell(FILE * stream);
函數說明
ftell()用來取得文件流目前的讀寫位置。參數stream為已打開的文件指針。
返回值
當調用成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤代碼。
錯誤代碼
EBADF 參數stream無效或可移動讀寫位置的文件流。
范例
參考fseek()。
通過fseek()、ftell()兩個函數,我們就可以隨意訪問文件的任何位置了,想了想好像操作文件就這么easy,實在也沒有更多
可 說的了。對了,fseek()和ftell()存在一個潛在的問題就是他們限制文件的大小只能在long類型的表示范圍以內,也就是說通過這種方式,只能 打開2,000,000,000字節的文件,不過在絕大多數情況下似乎也已經夠用了。如果需要打開更大的文件,你需要用到fgetpos()、 fsetpos()函數了,那是另一個命題了。