看來fseek現在至少在我的實現中,自然支持大文件而沒有fseek64,lseek或一些奇怪的編譯器宏。fseek現在支持大文件
這是什麼時候發生的?
#include <cstdio>
#include <cstdlib>
void writeF(const char*fname,size_t nItems){
FILE *fp=NULL;
if(NULL==(fp=fopen(fname,"w"))){
fprintf(stderr,"\t-> problems opening file:%s\n",fname);
exit(0);
}
for(size_t i=0;i<nItems;i++)
fwrite(&i,sizeof(size_t),1,fp);
fclose(fp);
}
void getIt(const char *fname,size_t offset,int whence,int nItems){
size_t ary[nItems];
FILE *fp = fopen(fname,"r");
fseek(fp,offset*sizeof(size_t),whence);
fread(ary,sizeof(size_t),nItems,fp);
for(int i=0;i<nItems;i++)
fprintf(stderr,"%lu\n",ary[i]);
fclose(fp);
}
int main(){
const char * fname = "temp.bin";
writeF(fname,1000000000);//writefile
getIt(fname,999999990,SEEK_SET,10);//get last 10 seek from start
getIt(fname,-10,SEEK_END,10);//get last 10 seek from start
return 0;
}
上面的代碼使用二進制size_t格式的條目1-10^9寫入一個大文件。 然後寫入最後10個條目,從文件的開始處尋找,並從文件末尾查找。
我以爲fseek只能達到2GB,但在這裏我看不到2GB的文件。 – 2011-07-07 19:28:45
@monkeyking - IOW,1000000000 = 1,000,000,000和999999990 = 999,999,990,這兩個都不是> 2GB – KevinDTimm
此外,您沒有提及平臺...呃 – sehe