C语言fseek()、ftell()、rewind()函数

这三个函数的功能是对文件流的位置指针进行定位,方便文件的读写操作;例如打开文件写入内容后,这时文件指针在末尾后一个字节,若需直接读出内容,可以选择关闭文件重新打开,这样文件指针重新指向文件首部,但这样来回打开关闭文件容易出错,可以使用fseek()函数对文件位置指针进行重定位,重新将指针定位到文件首部。

注意!!!
这里所说的“指针”并不是文件流指针,而是文件内部的位置指针;随着对文件的读写操作,文件的位置指针向后移动(指向当前读写字节),文件关闭后指针自动指向文件首部。文件流指针指向整个文件,不重新赋值指向不会改变。

fseek()函数

函数原型

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);

rewind()函数、fseek()函数以及ftell()函数都在标准IO库中,fseek()中stream表示文件流指针,whence表示想要定位的位置,offset表示偏移量,根据whence的位置需要移动的字节数,可正可负,正数表示正向偏移,负数表示反向偏移。fseek()可以设定访问文件的读写位置,可以以任意顺序访问文件的位置,从而实现文件的随机访问。

whence的常量描述:

常量数值描述
SEEK_SET0文件首部
SEEK_CUR1文件指针当前位置
SEEK_END2文件尾部
  • SEEK_SET表示文件指针从文件首部偏移offset个字节(offset不能是负数),只能正向偏移
  • SEEK_CUR表示文件指针从当前位置偏移offset个字节
  • SEET_END表示文件指针从文件末尾偏移offset个字节(offset不能为正数),只能负向偏移
fseek(fp,0L,SEEK_SET);	//定位到文件首部
fseek(fp,100,SEEK_SET);	//定位到文件首部向后偏移100字节
fseek(fp,-100,SEEK_CUR);	//定位到当前位置向前100字节
fseek(fp,0L,SEEK_END);	//定位到文件尾部
fseek(fp,-50,SEEK_END);	//定位到文件尾部向前50字节

fseek 函数只返回执行的结果是否成功,成功返回0,失败返回-1,并不返回文件的读写位置。

rewind()函数

函数原型

#include <stdio.h>
void rewind(FILE *stream);

rewind()函数中steam表示一个文件流指针,是将steam所指向文件的位置指针重新定位到文件首部,这个函数只能实现这一个功能;根据函数的原型,可以发现该函数的返回值为空,则无法判断其是否成功,也可以理解为该函数不会失败;因此在使用中最好使用fseek()函数进行替代。

rewind(fp);		等价于	fseek(fp,0L,SEEK_SET);

ftell()函数

函数原型

#include<stdio.h>
long ftell(FILE *stream);

ftell()函数的参数与rewind()函数相同,是一个文件流指针,ftell()函数获取当前位置指针所在的字节数,返回值是长整型。在实际读写文件中,文件位置将会频繁的随意移动,到最后不知道位置指针指向哪里,就可以利用ftell()函数得到当前位置指针的位置,下面写一段代码,利用fseek()和ftell()获取文件的大小。

#include<stdio.h>
#include<stdlib.h>

int main()
{
	FILE *fp=NULL;

	fp=fopen("文件位置及名称“,"r");	//以只读形式打开文件
	if(fp==NULL)
	{
		perror("fopen()");
		exit(1);
	}
	
	fseek(fp,0L,SEEK_END);	//将文件位置指针指向文件末尾
	printf("File size is %ld.\n",ftell(fp);		//长整型
	exit(0);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值