fseek函数的用法,c语言中ftell是什么意思

转自: http://blog.csdn.net/Lijun 5635/article/details/14210181

功能

在流(数据流/文件)上重新定位文件内部的位置指针

注:不是查找文件指针,而是文件指针指向文件/流。 位置指针指向文件内部的字节位置,随着文件的读取而移动,文件指针必须重新赋值才能指向其他文件。

2使用方法

intfseek(file*stream,long offset,int fromwhere );

3说明

函数设置文件指针stream的位置。 在执行成功之后,stream可基于fromwhere (偏移开始位置:文件头0(seek_set )、当前位置1 )1(SEEK_CUR )、文件末端2 )2(SEEK_END ) ) 如果执行失败(例如,offset超过文件本身的大小),则流指向的位置不会改变。

fseek函数与lseek函数类似,但lseek返回off_t的值,而fseek返回整数。

4返回值

成功、0、失败返回-1,如果设置了errno的值,则perror ()函数可以输出错误。

fseek position the file (文件位置) (pointer )指针) forthefilereferencedbystreamtothebytelocationcalculatedbyoferenced

5程序示例

#include stdio.h

长文件大小(file * stream );

入主(void ) )。

{

文件*流;

sream=fopen(myfile.txt ),) w );

frintf(stream,’ This is a test ‘ );

打印(filesizeofmyfile.txtis % ldbytes (n ),filesize(stream );

close (流;

返回0;

}

长文件大小(文件*流) )。

{

长整型,长整型;

Curpos=ftell(stream );

seek(stream,0L,SEEK_END );

length=ftell(stream;

seek(stream,curpos,SEEK_SET );

返回长度;

}

intfseek(file*stream,long offset,int origin );

第一个参数stream是文件指针

第二个参数offset是偏移,正数表示正偏移,负数表示负偏移

第三个参数origin设置从文件的位置偏移。 它可以是SEEK_CUR、SEEK_END或SEEK_SET的值

SEEK_SET :文件的开头

SEEK_CUR :当前位置

SEEK_END :文件的末尾

其中,SEEK_SET、SEEK_CUR和SEEK_END依次为0、1和2。

简而言之:

seek(FP,100L,0 ); 将文件内部指针移动到距离文件开头100字节的地方;

seek(FP,100L,1 ); 将文件内部指针移动到距离文件当前位置100字节的位置;

seek(FP,-100L,2 ); 将文件的内部指针移回到距离文件末尾100字节的位置。

使用案例:

#包含

#define N 5

typedef struct student {

龙星;

char name[10];

float score[3];

} STU;

voidfun(char*filename,STU n ) ) ) ) ) ) ) ) ) ) ) )。

{

FILE *fp

FP=fopen(filename,’ rb ‘ );

seek(FP,-1L*sizeof ) stu ),SEEK_END );

write(n,sizeof ) stu ),1,fp );

flose(FP );

}

void main ()/*修改以覆盖最后的学生数据) /

{

STU t[N]={ {10001,’ MaChao ‘,91,92,77 },{10002,’ CaoKai ‘,75,60,88 },

{10003,’ LiSi ‘,85,70,78 },{10004,’芳

Fang”, 90, 82, 87},

{10005,”ZhangSan”, 95, 80, 88}};

STU n={10006,”ZhaoSi”, 55, 70, 68}, ss[N];

int i,j; FILE *fp;

fp = fopen(“student.dat”, “wb”);

fwrite(t, sizeof(STU), N, fp);

fclose(fp);

fp = fopen(“student.dat”, “rb”);

fread(ss, sizeof(STU), N, fp);

fclose(fp);

printf(“\nThe original data :\n\n”);

for (j=0; j{

printf(“\nNo: %ld Name: %-8s Scores: “,ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf(“%6.2f “, ss[j].score[i]);

printf(“\n”);

}

fun(“student.dat”, n);

printf(“\nThe data after modifing :\n\n”);

fp = fopen(“student.dat”, “rb”);

fread(ss, sizeof(STU), N, fp);

fclose(fp);

for (j=0; j{

printf(“\nNo: %ld Name: %-8s Scores: “,ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf(“%6.2f “, ss[j].score[i]);

printf(“\n”);

}

}

6注意事项

fseek函数的 文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。 fseek函数也可以这样理解,相当于在文件当中定位。这样在读取规律性 存储文件时可以 利用其OFFSET 偏移量读取文件上任意的内容。

fseek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意回车换行的情况:因为在一般浏览工具如UltraEdit中,回车换行视为两个字符0x0D和0x0A,但真实的文件读写和定位时却按照一个字符0x0A进行处理,因此碰到此类问题时,可以考虑将文件整个读入 内存,然后在内存中手工插入0x0D的方法,这样可以达到较好的处理效果。

目 录

1函数简介

1.1函数名

1.2头文件

1.3功 能

1.4函数原型

1.5函数功能

2调用示例

3程序示例

1函数简介

函数名

: ftell

头文件

:

功 能

: 返回 当前文件位置,也就是说返回FILE 指针当前位置。

函数原型

: long ftell(FILE *stream);

函数功能

:函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。

2调用示例

ftell(fp);利用函数 ftell() 也能方便地知道一个文件的长。如以下语句序列: fseek(fp, 0L,SEEK_END); len =ftell(fp)+1; 首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。

3程序示例

举例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

#include

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

main()

{

FILE *myf;

long f1;

myf=fopen(“1.txt”,”rb”);

fseek(myf,0,SEEK_END);

f1=ftell(myf);

fclose(myf);

printf(“%d\n”,f1);

}

函数名: rewind()

功 能: 将文件内部的位置 指针重新指向一个流( 数据流/文件)的开头

注意:不是 文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而 文件指针是指向整个文件,如果不重新赋值文件指针不会改变。

rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET);

[1]

用 法: void rewind(FILE *stream);

头文件:

stdio.h

返回值:无

英文解释: A statement such as

rewind( cfptr );

causes a program’s file position–which indicates the number of the next byte in the file to be read or written– to be repositioned to the beginnning of the file pointed to by cfptr.

程序例:

#include

#include

int main(void)

{

FILE *fp;

char fname[10] = “TXXXXXX”, *newname, first;

newname =

mktemp(fname);

fp = fopen(newname,”w+”);

if(NULL==fp)

return 1;

fprintf(fp,”abcdefghijklmnopqrstuvwxyz”);

rewind(fp);

fscanf(fp,”%c”,&first);

printf(“The first character is: %c\n”,first);

fclose(fp);

remove(newname);

return 0;

}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注