文件操作详解(三)--fsee -- ftell -- rewind -- feof函数 -- ferror函数

一.文件的随机读写

1.fseek

int fseek(FILE* stream,long int offset,int origin);
//第一个参数文件流
//第二个参数偏移量
//偏移量如果是正数,向后偏移
//偏移量如果是负数,向前偏移
//第三个参数起始位置

fseek从当前光标指向的流中获取字符
SEEK_SET:文件的起始位置
SEEK_CUR:文件指针当前位置
SEEK_END:文件的结束位置
在这里插入图片描述

int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读
	char ch = fgetc(pf);
	printf("%c\n", ch);//a

	fseek(pf, 4, SEEK_SET);
	//距文件起始位置4个偏移量
	printf("%c\n", fgetc(pf));//e
	
	//fseek(pf,5,SEEK_CUR);
	//距当前文件位置5个偏移量
	//printf("%c\n", fgetc(pf));//g
	
	//fseek(pf,-6,SEEK_END);
	//距文件末尾位置6个偏移量
    //printf("%c\n",fgetc(pf));//d
     
	fclose(pf);
	pf = NULL;

	return 0;
}

这是test.txt中的字符串
在这里插入图片描述

2.ftell

返回文件指针相对于起始位置的偏移量

long int ftell(FILE* stream);
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读
	char ch = fgetc(pf);
	printf("%c\n", ch);//a

	int ret = ftell(pf);
	printf("%d\n", ret);//1

	fclose(pf);
	pf = NULL;

	return 0;
}

在这里插入图片描述

3.rewind

让文件指针的位置回到文件的起始位置

void rewind(FILE* stream);
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读
	char ch = fgetc(pf);
	printf("%c\n", ch);//a

	int ret = ftell(pf);
	printf("%d\n", ret);//1

	rewind(pf);
	//文件指针回到起始位置
	printf("%c\n",fgetc(pf));//a
	//打印a说明文件回到了起始位置

	fclose(pf);
	pf = NULL;

	return 0;
}

在这里插入图片描述

二.文件读写结束的判定

文件现在读取结束了,但是是什么原因读取结束的呢?
1.可能是遇到了文件末尾
2.可能是读取的时候发生了错误

1.feof函数(不是用来判定文件结束的)

文件已经结束,用来判定文件结束的原因
feof的作用是:文件读取结束的时候,判断文件是否遇到文件末而结束的
feof没有读到文件末尾返回0,读到文件末尾返回非0值

int feof(FILE* stream)
//feof函数只需要关注传入的文件指针是否为NULL即可

2.ferror函数

文件已经结束,ferror读取的时候没有发生错误返回0,发生错误返回非0值

int ferror(FILE* stream)
//ferror函数只需要关注传入的文件指针是否为NULL即可

下面来举一个例子:

int main()
{
	FILE* pf = fopen("test.txt", "r");
	//打开文件
	if (pf == NULL)
	{
		perror("fopen");
		//打印错误
		return 1;
		//发生错误提前返回
	}
	//使用
	char ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
		printf("%c ", ch);
	}
	printf("\n");
	if (feof(pf))//返回非0值
	{
		printf("读到文件末尾而结束\n");
	}
	else if(ferror(pf))//返回非0值
	{
		printf("读取错误而结束\n");
		perror("ferror");
	}
	fclose(pf);
	//关闭文件
	pf = NULL;

	return 0;
}

在这里插入图片描述

三.文件缓冲区

在这里插入图片描述

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值