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