C语言——文件初识

1.什么是文件

磁盘中的文件是文件,键盘是文件,显示器也是文件,所以有一句话叫做一切皆文件。
但是从程序设计角度来说,文件一般有两种,程序文件和数据文件;
程序文件:包含源程序文件(.c后缀),目标文件(windows环境后缀.obj),可执行文件(windows环境.exe);
数据文件:程序运行时读取或输出的数据;
接下来谈的主要是数据文件;

2.为什么使用文件

程序运行时数据都是保存在内存之中,当退出程序这些数据就会消失;比如通讯录小程序,我们输入了联系人信息,一旦退出又要重新输入数据,这样的通讯录就没有了意义。而当我们退出程序将数据保存在磁盘文件之中,运行程序时再将数据读取出来,这样就将信息做到了持久化保存;

3.文件名

我们使用一个文件必须知道这个文件的名字,一个文件名通常包含3个部分:文件路径+文件名主干+文件后缀;
比如:e\project\file.log
文件路径:e盘之中的project 文件名主干:file 文件名后缀:log
在这里插入图片描述

4.如何使用

要使用文件,首先我们要将一个文件打开,文件打开的函数是:FILE * fopen ( const char * filename, const char * mode );;
形参列表之中:filename表示的是打开文件的名字,mode表示的是打开的方式是读取还是写入。返回值是一个文件指针,下面来演示一下:
在这里插入图片描述

在这里插入图片描述
上面进行了初步的演示,接下来我将继续介绍文件指针,文件的读写方式;

5.文件指针

在这里插入图片描述
上面打开文件演示中的FILE *fp即定义的文件指针变量,用来接收文件信息区的地址,通过这个指针变量就可以访问到与文件信息对应的文件;

6.文件的使用方式

文件使用方式含义
“r”为输入打开一个文本文件
“w”为输出打开一个文本文件
“a”向文本文件尾增加数据
“rb”为输入打开一个二进制文件
“wb”为输出打开一个二进制文件
“ab”向二进制文件尾增加数据
“r+”为读/写打开一个文本文件
“w+”为读/写建立一个新的文本文件
“a+”打开一个文件在文件尾进行续写
“rb+”为读/写打开一个二进制文件
“wb+”为读/写建立一个新的二进制文件
“ab+”打开一个二进制文件,在文件尾进行读和写

上述表格看起来复杂,其实只要知道:
1.w对应的是文本文件的输出,是覆盖式写入,当打开的文件不存在时会创建一个文件。
下面动图展示了“w”方式的覆盖式写入
在这里插入图片描述

2.r对应的是文本文件的输入,当打开的文件不存在时会打开失败。
在这里插入图片描述

3.是对文本文件进行续写,是在文件末尾续写,当打开文件不存在时会打开失败。
经过验证,在vs2013,当打开文件不存在时也会自动创建一个新的文件;下面动图演示“a”在文件尾进行续写
在这里插入图片描述

4.b对应的是二进制文件,只要在上述四种方式后面加上b就是对应的二进制文件;

5.“+”表示的是读写一体,同样只要在上述方式后端添上“+”;

7.文件的读写函数

在这里插入图片描述
下面演示两个字符输入函数的使用;
7.1getc演示:
在这里插入图片描述
7.2fputc演示:
在这里插入图片描述

8.文件指针调整函数

8.1 fseek:根据文件指针的位置和偏移量来定位文件指针在这里插入图片描述
演示:
在这里插入图片描述

9. long int ftell(FILE stream):返回文件指针相对于起始位置的偏移量

在这里插入图片描述

10.rewind:读写位置恢复到最开始

在这里插入图片描述

11.文本文件和二进制文件

文本文件:对人友好,将文件内容转化为对应的ASCII码值对应的符号
在这里插入图片描述

二进制文件:直接将对应的补码储存到文件之中,即内存里面什么样,文件之中也是什么样
在这里插入图片描述

12.文件读取结束的判定feof

文件读取结束的判定
文本文件的判定:
在使用feof的使用必须让文件一直读取,读取到出错再用feof判断返回值是否为文件的结尾;
fgetc判断是否为EOF,fgets判断是否为NULL;
因为文件读取出错的时候也有可能返回EOF,即因为其他因素而导致结束读取,这时候就需要用feof来判定返回值EOF是否为读取结束;
演示:
在这里插入图片描述
二进制文件读取结束判定
二进制文件的读结束判定为:判定返回值是否小于实际要读的个数
因为当fread读取返回值一直等于要读取的个数(满足期望值)即会一直读取下去,当返回值小于期望值时就不会再读了;

成功演示
在这里插入图片描述

失败演示
在这里插入图片描述

13.文件缓冲区

先上理论:
c语言默认提供缓冲机制
常见缓冲机制有:无缓冲,行缓冲,全缓冲
普通文件写入采用全缓冲
显示器文件写入采用行缓冲
所谓的缓冲区本质就是一块内存,存在的最大价值就是为了提升程序的效率;

在这里插入图片描述
引申
因为缓冲区的存在,需要刷新缓冲区或者文件操作结束的时候关闭文件,否则可能导致文件读写问题

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值