複製鏈接
請複製以下鏈接發送給好友

ftell

鎖定
函數 ftell 用於得到文件位置指針當前位置相對於文件首的偏移字節數。在隨機方式存取文件時,由於文件位置頻繁的前後移動,程序不容易確定文件的當前位置。
該函數在Windows32位系統下對大於231-1文件,即:2.1G以上的文件操作時可能出錯。
中文名
ftell
實    質
函數
功 能
返回當前文件位置

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);
}