文件操作(中)

1.文件的顺序读写

1.1顺序读写的函数介绍

函数名功能适⽤于
fgetc字符输⼊函数所有输⼊流
fputc字符输出函数所有输出流
fgets⽂本⾏输⼊函数所有输⼊流
fputs⽂本⾏输出函数所有输出流
fscanf格式化输⼊函数所有输⼊流
fprintf格式化输出函数所有输出流
fread⼆进制输⼊⽂件
fwrite⼆进制输出⽂件

ps:关于我的个人理解,输入可以理解为读取,从文件里读取,从键盘上读取(输入);

输出可以理解为就是输出,将程序中编写的输出到屏幕,输出写入到文件中;具体我给出下面的代

码供大家理解;

1.1.1 fgetc:

1.1.1.1

由于这里是一“r”的方式打开文件,如果在绝对路径没有要操作的文件,就会报错,如下图

1.1.1.2

如果要操作的文件且该文件已经保存了99,fgetc就会从文件中读取一个字符,并返回该字符的ASCII码值,9的ASCII码值为57;

1.1.2 fputs

这里是以写的方式打开文件,所以如果没有该文件,会自动创建该文件;

fputs(const char *string, FILE *stream),第一个参数为一个要写入的字符串的地址,第二个参数

为操作该文件的文件指针,写入成功会返回一个非负的,正的,零的数字(我测试vs2022是返回

一个零),同时测得如果文件中有数据,新写入的数据会覆盖原来的,就i像前面写入的99,这个

程序执行完就只剩Hello World在文件中;

其余的我就不做过多的赘述,不妨自己动手试试。

2.文件的随机读写

相比较顺序读写,随机读写文件更自由,通俗来讲就是通过几个函数改变文件指针的位置,从而改变读写的内容,以下是几种方法:

2.1 fseek(int fseek( FILE *stream, long offset, int origin );(成功返回0,否则返回非零)

Return Value

If successful, fseek returns 0. Otherwise, it returns a nonzero value. On devices incapable of seeking, the return value is undefined.(摘自msdn文档)

根据文件指针的位置和偏移量来定位文件指针。(offset代表要偏移的数量,比如1就是文件指针向后一位,origin代表文件指针起始位置

//代码演示

#include<stdio.h>
int main() {

	FILE* pf = fopen("test.txt","wb");
	if (pf == NULL) {
		perror("fopen");
		return 1;
	}
	fputs("this is a c program",pf);
	fseek(pf,2,SEEK_SET);//SEEK_SET文件最开始的位置,0
	fputs("no no no",pf);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

由于这里是二进制形式写入,所以只能用二进制编译器打开文件,请看下图:

图一为只运行第一个fputs,图二为运行两个fputs,可以看到第二个插入的字符串就第一个字符串部分覆盖;

2.2 ftell    

long ftell( FILE *stream );

返回文件指针的偏移量

2.3 rewind    

void rewind( FILE *stream );

Repositions the file pointer to the beginning of a file.(将文件指针重新定位到文件的开头)

//演示代码

#include<stdio.h>
int main() {

	FILE* pf = fopen("test.txt", "wb");
	if (pf == NULL) {
		perror("fopen");
		return 1;
	}
	fputs("this is a c program", pf);
	fseek(pf, 0, SEEK_END);//SEEK_END文件最后的位置
	//这里是指向最后一个字母m之后的位置
	long seek=ftell(pf);
	printf("%d\n", seek);
	rewind(pf);//让文件指针重新定位到文件最开始的位置
	seek = ftell(pf);
	printf("%d",seek);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

//执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a添砖Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值