【C语言】文件操作

最近事情真的好多呀,但我喜欢这种充实又忙碌的感觉,这给我一种踏踏实实的安全感,这段时间我学习了关于文件操作的各种知识,现在总结一下,分享给大家!

1.使用文件可以让我们将数据存放到电脑的硬盘里,从而让数据能够保存下来

文件的分类:

1.程序文件:源程序文件,目标文件,可执行程序

2.数据文件:

文件的名称:

一个文件必须要有一个唯一的标识,这个标识就是文件名

文件名包含三部分:文件路径,文件名主干,文件后缀

比如:F:\git\test.txt 

其中  F:\git  就是文件路径,test就是文件名主干,.txt就是文件的后缀

补充:1.文件名中可以不包含文件后缀

           2.文件中有一些禁止使用的符号,比如:\/ : * ? " < > |

文件的打开与关闭

每个被使用的文件都在内存里开辟了一个相应的文件信息区,用来存放文件的相关信息(文件的名字,文字状态,及文件当前的位置)这些信息存放在一个结构体变量里,该结构体类型是又系统声明的,取名FILE

一般是通过一个FILE*类型的指针来FILE结构的变量

FILE* pf ;

fopen 来打开文件,fclose来关闭文件

 

查阅文档,我们不难发现,fopen函数的第一个参数是一个字符串,这个字符串就是文件的文件名,而第二个参数也是一个字符串类型的,这里是指文件打开的方式,我将在接下来的内容中不断地介绍

文件的顺序读写

在搞明白文件顺序读写的这些函数之前,我们需要先了解一下文件和内存之间的读和写

还记得我们经常使用的scanf和printf函数吗

键盘----scanf-----内存-----printf-----屏幕

由键盘通过scanf向内存中输入,被称为读

由内存通过printf向屏幕中输出,被称为写

不难看出,读和写的主语是内存

因此,当我们把键盘和屏幕替代成文件后

有这样的关系:

文件----(读)----内存----(写)----文件

字符输入函数fgetc                适用于所有输入流(读)

字符输出函数fputc                适用于所有输出流(写)

当我们要往文件里写如某些数据时,是从内存----写----文件的过程,我们要用fputc函数

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt","w");
	if (pf == NULL)
	{
		perror("fopen::");
	}

	fputc('s', pf);

	
	//关闭文件
	fclose(pf);
	pf = NULL;
}

这样我们就成功地将一个字符s输出到了文件里

同样的,我们可以使用fgetc来读文件里的一个字符

 当你觉得一个字符一个字符的读取数据太过于低效,你也可以使用fgets,fputs来一行一行的进行数据处理,这里不做过多赘述

接下来我想重点讲解一组函数

scanf                fscanf                 sscanf

printf                 fprintf                 sprintf

 

 

printf: 按照格式化的方式把数据写到屏幕上

fprintf:按照格式化的方式把数据写到文件里

sprintf:按照格式化的方式把数据写到字符串里

如果你从未见过下面两个函数,没有关系,仔细对比他们的参数你就会发现

他们有一部分是完全一样的

fprintf多出一个FILE*类型的变量

这说明fprintf的作用是按照格式化的方式把数据写到文件里

而sprintf多出一个char*类型的变量

这说明sprintf的作用是按照格式化的方式把数据写到字符串里

有了上面的经验,我们不难发现

scanf是从键盘读格式化的数据到内存中

fscanf是从文件中读格式化的数据到内存中

sscanf是从字符串中读格式化的数据到内存中

想必说到这里,你一定好奇printf和fprintf、scanf和fscanf的关系吧

其实,在任意一个C文件打开的时候都会默认打开三个流:

1.stdin     标准输入流

2.stdout   标准输出流

3.stderr    标准错误流

阅读文档可以知道,fprintf和fscanf都是适用于所有输出流和输入流的

其实,我们把原本放文件指针的位置放上标准输入输出流,就能实现printf和scanf同样的效果

int main()
{
	int a = 100;
	fprintf(stdout,"%d",a);
}

这个函数就代表将a的内容通过"%d"的格式输出(写)到屏幕上,和printf的功能是一样的

同理,fscanf在这里就是从键盘输入的内容以"%d"的格式读取,放到a里

int main()
{
	int a = 0;
	fscanf(stdin,"%d",&a);

	printf("%d",a);
}

文件的随机读写

因为较为简单,在这里只简单介绍一下ftell函数

 其中第三个参数

分别意为,文件起始的地址,现在的位置,和末尾

可以通过文件指针的位置和偏移量定位文件指针

ftell

这个函数会返回文件指针相对起始位置的偏移量

fwind

这个函数会让文件指针回到起始位置

经常被错误使用的feof函数

经常有人使用feof函数来判断文件是否关闭成功,但其实feof并不是用来判断文件是否关闭成功的

而是在文件已经关闭的情况下,判断是因为读取失败结束还是正常结束的

1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )
fgetc 判断是否为 EOF .
fgets 判断返回值是否为 NULL .

2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
 

今天的内容就先分享到这里,文件的内容确实很多,希望对大家有所帮助,如有错误欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝色学者i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值