本章作为科普篇,大家在工作时可能用的很少,但不看白不看嘛!看完一定加深编程语言与计算机之间的理解!
我们看本章的几个重点:
1:为什么要使用文件?
2:什么是文件
3:文件的打开与关闭
4:文件的使用方式
5:文件的顺序读写
6:文件的随机读写
(C语言阶段只需要掌握以上即可!)
为什么要使用文件
我们使用计算机需要存储需要的数据,比如过了10天半个月,我们去找之前的各种文件档案,只要一打开硬盘,根据名字就可以找到,那么使用文件的原因是不是也就出来了:将数据存储在硬盘上,做到数据的持久化保存
什么是文件
首先磁盘上的文件是文件
在程序中,一般谈的文件有2种:程序文件 数据文件
程序文件包含:源程序文件“.c”(文件后缀)
目标文件“.obj”
可执行程序“.exe”
.......
比如:(注意看文件后缀)
注:如果自己的文件打开没有后缀的,只需要设置一下就行了,比如:查看->显示->文件扩展名(勾选)
数据文件 :文件的内容不一定是程序,而是程序运行时需要读取的数据,程序运行时需要从中读取数据的文件,或者输出内容的文件(简而言之,就是正在被读取的文件)
本篇讨论的是数据文件
一个文件要有唯一的文件标识,文件标识也叫文件名,下面我们看文件名字的组成:
文件名:文件路径+文件主干+文件后缀
(绝对写法)比如: C:\\ code \\ test . txt
分别指: 路径 \\ 主干. 后缀
(相对写法)比如: text. txt
以上2种写法都是可以的(一种写完整,一种只写主干与后缀)
文件的打开与关闭
先看文件的运行方式:
我们知道硬盘是存储数据的,那么内存是用来运行的
打开文件之后,会在内存中产生一个文件信息区,这个文件信息区也就是一个结构体,它的类型是struct FILE
不同的编译器的FILE类型包含的内容不同,但都大同小异,每次打开一个文件,系统会根据文件的情况自动创建一个struct FILE类型的结构体,并填充信息
一般都是一个FILE的指针来维护这个结构体,比如:FILE * pf
简而言之,就是以下3步:
1:打开文件
2:在内存中产生一个文件信息区( struct FILE类型 的结构体)
3:创建一个FILE类型的指针来维护
比如进行画图演示:
文件的打开与关闭涉及到2个函数: fopen(打开) fclose(关闭)
我们先看文件的打开函数:
它有2个参数,分别代表: 文件名 打开方式(对应上图的“模式”)
我们再看文件的关闭函数:
它只有1个参数: 指向这个文件的指针
我们用例子给大家讲解,比如:
现在有这样一个文件:
现在我们打开它:(没有报错,说明打开成功了)
注意:
文件目录是无法打开的,比如这些:
我们可以打开目录,右键->新建->文本文档(自己命名),就可以在VS里面打开了,比如:
文件的使用方式
我们知道在 fopen 函数里面有一个参数:文件的打开方式
那么这些方式就是以下:
它的用法就是作为参数传给 fopen 函数 ,比如:
文件的顺序读写
我们先来看看什么是顺序读写?
简而言之:从头读到尾,掌握读写函数
我们来看看顺序读写的各种函数:
首先我们要明白输入跟输出的对象:
这个内存可以理解为键盘
fgetc (读文件中的一个字符)
这个函数就一个参数: 指向文件的指针(也叫流)
返回值: int类型
啥意思呢?因为是顺序读写,所以这个函数会返回给你文件的一个字符,返回类型为int(被提升了)
比如写法:
fputc(写入文件一个字符)
有参数2个: 写入内容 指向文件的指针(也叫流)
比如写法:
我们把 写 跟 读 连起来用,比如我们先写(注意改变访问方式):
这样我们就把内容写入文件了 ,如下图:
我们再把文件的内容读出来
fgets(读文件中的字符串)
参数: char类型数组的数组名 读取个数(字节) 指向文件的指针(也叫流)
返回值: char *类型的指针
解释:char类型的数组是用来存储你要写入的字符串的
比如写法:(打印出来只需要打印这个接收的指针就OK了!)
fputs(写入字符串到文件)
参数: char类型的数组名或者字符串 指向文件的指针(也叫流)
比如一种写法:
下面表示我们已经写入成功了:
第二种写法:
下面看效果:
fprintf(格式化写入到文件)
2个参数: 指向文件的指针(也叫流) 各种占位符 对应结构体成员
我们知道文件信息区是类似结构体的,那么这种格式化输入就是结构体式的输入!
比如,写法:
下面看效果:
fscanf(格式化输出到屏幕)
2个参数: 指向文件的指针(也叫流) 占位符 对应结构体成员
用法跟上一个函数一样,比如:
fwrite(二进制形式写入文件)
4个参数: 元素地址 元素大小 元素个数 指向文件的指针(也叫流)
比如:
写到文件:
fread(二进制方式读取)
4个参数: 读取放入元素的地址 元素大小 元素个数 指向文件的指针(也叫流)
比如:
对“流”的解释
我们先来看标准定义:
简而言之:流就是一个中间媒介,介于 数据 跟 操作对象之间
通过“ 流 ”让彼此产生连接
我们画图演示:
任何一个C语言程序运行时,默认打开3个流(类型都是FILE *):
stdin——标准输入(理解为键盘)
stdout——标准输出(理解为屏幕)
stderr——标准错误(理解为屏幕)
文件的随机读写
哈是随机读写?
就是不按顺序读呗!哈哈哈
和顺序读写类似,但是随机读写的函数少很多,我们分别来看看吧!
fseek(根据文件指针的位置和偏移量来定位文件指针)
3个参数: 指向文件的指针(也叫流) 偏移量 起始位置
重点是这个起始位置参数(我们后面细说):
比如,现在我们打印完a,b,c,这个文件指针会指向d:
那么,既然文件指针指向了d,我如果还想打印b,这时候是不是就要改变指针的指向了!
下面我们进行演示:
下面我们对这个参考位置进行细说:
SEEK_SET 表示指针指向文件开头位置(不是真的改变指针指向,只是做一个标记)
SEEK_CUR 表示指针指向文件当前位置(不实际改变指针指向,仅做一个标记)
上面是用SEEK_CUR进行的演示,下面我们用SEEK_SET进行演示:
以上就是fseek函数的运用,下面我们看另一个偏移函数!
ftell(计算当前偏移量)
参数: 指向文件的指针(也叫流)
返回值:偏移量(int)
比如,我打印完a,b,c,指针现在指向d,那么偏移量从初始到d,偏移量应该是3,下面演示:
rewind(让文件指针回到初始位置)
参数:指向文件的指针(也叫流)
顾名思义,就是重置文件指针位置,下面进行演示:
先打印a,之后指针指向b,此时偏移量是1,现在重置偏移量,指针指向初始位置,偏移量也就是0
C语言阶段了解这些已经超过很多人了!后续学习操作系统的伙伴,会了解的更深!
标签:文件,指向,留言,读写,收藏,参数,C语言,比如,指针 From: https://blog.csdn.net/Dovis5884/article/details/145207952