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