函式 ftell 用於得到檔案位置指針當前位置相對於檔案首的偏移位元組數。在隨機方式存取檔案時,由於檔案位置頻繁的前後移動,程式不容易確定檔案的當前位置。
該函式對大於231-1檔案,即:2.1G以上的檔案操作時可能出錯。
基本介紹
函式簡介,函式名,函式原型,函式功能,約束條件,調用示例,程式示例,
函式簡介
用於得到檔案位置指針當前位置相對於檔案首的偏移位元組數。
函式名
ftell
函式原型
long ftell(FILE *stream);
函式功能
使用fseek函式後再調用函式ftell()就能非常容易地確定檔案的當前位置。
約束條件
因為ftell返回long型,根據long型的取值範圍-231~231-1(-2147483648~2147483647),故對大於2.1G的檔案進行操作時出錯。
調用示例
ftell(fp);利用函式 ftell() 也能方便地知道一個檔案的長。如以下語句序列: fseek(fp, 0L,SEEK_END); len =ftell(fp); 首先將檔案的當前位置移到檔案的末尾,然後調用函式ftell()獲得當前位置相對於檔案首的位移,該位移值等於檔案所含位元組數。
程式示例
舉例1:
#include <stdio.h>int main(void){FILE *stream;stream = fopen("MYFILE.TXT", "w+");fprintf(stream, "This is a test");printf("The file pointer is at byte \%ld\n", ftell(stream));fclose(stream);return 0;}
舉例2:
ftell一般用於讀取檔案的長度,下面補充一個例子,讀取文本檔案中的內容:
#include <stdio.h>#include <stdlib.h>int main(){FILE *fp;int flen;char *p;/* 以唯讀方式打開檔案 */if((fp = fopen ("1.txt","r"))==NULL){printf("\nfile open error\n");exit(0);}fseek(fp,0L,SEEK_END); /* 定位到檔案末尾 */flen=ftell(fp); /* 得到檔案大小 */p=(char *)malloc(flen+1); /* 根據檔案大小動態分配記憶體空間 */if(p==NULL){fclose(fp);return 0;}fseek(fp,0L,SEEK_SET); /* 定位到檔案開頭 */fread(p,flen,1,fp); /* 一次性讀取全部檔案內容 */p[flen]='\0'; /* 字元串結束標誌 */printf("%s",p);fclose(fp);free(p);return 0;}
程式改進
#include <stdio.h>main(){FILE *myf;long f1;//此處將f1設定為long 可以讀取更長的檔案myf=fopen("1.txt","rb");fseek(myf,0,SEEK_END);f1=ftell(myf);fclose(myf);printf(“%d\n”,f1);}