-
ftell
鎖定
函數 ftell 用於得到文件位置指針當前位置相對於文件首的偏移字節數。在隨機方式存取文件時,由於文件位置頻繁的前後移動,程序不容易確定文件的當前位置。
該函數在Windows32位系統下對大於231-1文件,即:2.1G以上的文件操作時可能出錯。
ftell函數簡介
用於得到文件位置指針當前位置相對於文件首的偏移字節數。
ftell函數名
ftell
ftell函數原型
long ftell(FILE *stream);
ftell函數功能
使用fseek函數後再調用函數ftell()就能非常容易地確定文件的當前位置。
ftell約束條件
在Windows系統x86程序上因為ftell返回的long型取值範圍為-2^31 ~2^31-1(-2147483648~2147483647),故對大於2.1G的文件進行操作時可能因整數溢出出錯。Windows系統x64程序的long類型取值範圍為-2^63 ~ 2^63(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808)理論上只有操作大於8589934592G的文件時才可能會出錯。
ftell調用示例
ftell(fp);利用函數 ftell() 也能方便地知道一個文件的長。如以下語句序列: fseek(fp, 0L,SEEK_END); len =ftell(fp); 首先將文件的當前位置移到文件的末尾,然後調用函數ftell()獲得當前位置相對於文件首的位移,該位移值等於文件所含字節數。
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); }
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:36次歷史版本
- 最近更新: LYPLGFX