文件及相关操作

文件存在的意义主要是保存数据。因为我们写的程序数据是存储在电脑内存中的,如果内存回收,数据就丢失了。因此我们想要将数据给永久保存,我们就可以使用文件。

文件一般分为两种:

程序文件

程序文件包含源程序文件(后缀为.c),目标文件(windows环境下后缀为.obj/Linux环境下后缀为.o),可执行程序(windows环境下后缀为.exe/Linux环境下一般没有后缀)。

数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

文件名

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

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念。

标准流

我们引入3个标准流的概念。

stdin-标准输入流

stdout-标准输出流

stderr-标准错误流

因此我们使用scanf,printf等函数就可以直接进行输入输出的操作。

文件指针

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息。

这些信息是保存在一个结构体变量中的,我们给这个结构体类型系统命名了,取名FILE。

因此我们常常构建FILE*的文件指针。

文件的使用方式

打开文件:fopen

关闭文件:fclose

"r"---只读文件(如果文件不存在,将报错)

"w"---只写文件(如果文件不存在,将建立一个新的文件)

"a"---追加(如果文件不存在,将建立一个新的文件)

"rb"---与“r”不同的是,“rb”是打开一个二进制文件

"wb"---与“w”不同的是,“wb”是打开一个二进制文件

“ab”---与“a”不同的是,“ab”是打开一个二进制文件

文件的顺序读写

顺序读写函数:

fgetc , fputc , fgets , fputs , fscanf , fprintf , fread , fwrite

fgetc 是在文件里输入一个字符

格式如下:

fgets 是将文件里的一个字符串输入出来放在一个数组里

格式如下:

fputc 是输出文件里一个字符

fputs 是输出文件里一个字符串

格式如下:

fscanf 是格式化输入一个文件里内容,可将其输入至另一个文件中

fprintf 是格式化输出一个文件里的内容 

fread 是二进制输入一个文件里内容,可将其输入至另一个文件中

格式如下:

将文件中的内容放置于arr数组中,并限制放入的大小为7个int类型的大小。

fwrite 是二进制输出一个文件里的内容 

格式如下:

将arr数组中的内容放到文件中打印出来,限制打印的数量为7个int整型的大小。

接下来,我们来对比一组函数

scanf / fscanf / sscanf

scanf 就是常用的输入函数

fscanf 是格式化输入一个文件里内容,可将其输入至另一个文件中

那么sscanf是什么呢?

sscanf 是将文件中的内容以一个字符串的形式打印出来,通常在使用这个函数时,我们会创建一个数组来存放数组串

举个例子:

对比看一下,fscanf在scanf的基础上多出来一个文件指针。sscanf在scanf的基础上多出来个字符指针。

printf / fprintf / sprintf

printf 就是常用的输出函数

fprintf 是格式化输出一个文件里的内容 

sprintf 是以字符串的形式将文件里的内容给打印出来,同样,我们常用数组来存放字符串,再讲数组给打印出来

举个例子:

对比看一下,fprintf在printf的基础上多出来一个文件指针。sprintf在printf的基础上多出来个字符指针。

接着,我们来介绍文件随机读写的几个函数

文件的随机读写

fseek

根据文件指针的位置和偏移量来定位文件指针

格式如下:

ftell

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

格式如下:

rewind

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

格式如下:

feof

feof 的作用是:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文尾结束。

注意几个点

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

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

fread判断返回值是否小于实际要读的个数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值