C语言文件操作(1)

tips

1. 

为什么要使用文件 

1. 我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。
2. 这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。 

3. 之前程序运行起来产生的数据是把它保存在内存中,内存中的数据只要你不用了,还给操作系统后,这时候这个数据就不在了,或者断电了,数据就不见了.....它的数据是没有办法持久化的。 

4.  那么数据怎么样才能持久化呢?就是把这些数据存起来,我什么时候想要就能够打开找到它,可以保存在硬盘上(形式:文件,数据库....)文件其实就是在硬盘上(C盘,D盘.......,这些都是电脑上的硬盘)。我可以把我的数据放进文件里面做到数据的持久化

什么是文件

1. 磁盘上的文件就是文件。
2. 比如说你在C盘,D盘,E盘里面看到的所有这些文件都是文件,文件夹里面进去之后还是文件
3. 在程序设计当中,我们谈的文件有两种:(从文件功能的角度分类)程序文件,数据文件。 

文件的分类

 

1   更加广泛的来说,你创建工程里面所携带的文件都可以称为程序文件

2.  数据文件:比如说在test.c里面需要读取文件a的信息,然后把数据写到文件b里面去,读a写b,我们所操作的a,b文件就是数据文件文件的内容不一定是程序,而是程序运行时读写的数据。程序运行需要从中读取数据的文件或者输出内容的文件就叫数据文件。

3.  怎么写代码操作数据文件就是我们要学的内容

4.  以前我们处理数据的输入输出都是以终端为对象,比如scanf输入,我是从键盘读取信息;printf打印信息的话,我是打印在屏幕上的,我们所操作的对象都是终端,键盘,屏幕这些都是我们操作的终端,并不是放进文件里面去。

5. 其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件

文件名

1. 一个文件需要有一个唯一的文件标识。以便用户识别与引用。

2. 文件名包含三个部分:文件路径+文件名主干+文件后缀
3. 如: c:\code\test.txt    c:\code\这个就是文件路径,test就是文件名主干,.txt就是文件后缀 
4. 一个文件的名字无非就跑不过这三个东西。有时候我们写文件名并没有写前面这个路径,这是因为当前需要的文件可能就在当前目录下放着,你用它很顺手,如果没有在当前路径下放着,那么你就要交代清楚路径,在哪个路径的哪个文件夹放着。
5. 为了方便起见,我们把文件标识通常叫为文件名。文件名=文件标识 

文件指针 

1. 缓冲文件系统中,关键的概念是"文件类型的指针",简称"文件指针"
2. 每个被使用的文件都在内存中开辟了一个相应的文件信息区,其用来存放文件的相关信息(文件名称,文件状态,文件当前的位置......)。这些信息是保存在一个结构体变量之中,该结构体变量的类型由系统声明,不是我们自己创造的,取名为FILE
3. 当你操作文件的时候,首先需要打开文件,打开文件之后就是使用文件,你需要对它读,写,你一旦打开这个文件,我们就会在内存中创建一个文件信息区,这个文件信息区就是与我这个打开的文件是关联的,这个文件信息区就记录了这个文件的名字叫什么?文件有多大?各种各样都会保存在这个文件信息区里面。
4. 这个文件信息区其实就是一个结构体变量,这个结构体类型叫FILE(typedef重命名过的),所以这个内存里面的文件信息区就是一个FILE结构体变量而已。只要打开一个文件,就会创建一个FILE类型的结构体变量在内存里面,这个结构体变量里面就记录着与这个文件所相关的信息,它与文件是一一对应的,每打开一个文件,就会在内存里面有一个与它对应的文件信息区(struct FILE类型的结构体变量)

 

5. 在不同的编译器下,FILE类型包含的内容不完全相同,但是大同小异。
6. 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充文件信息,不必关心细节。
7. 文件信息区一般都是通过FILE*指针变量来维护这个结构体变量的,这样子使用起来更为方便,我们创建一个FILE*的指针,它就可以指向文件信息区的这样一个空间。通过文件指针变量能够找到内存里面的文件信息区,找到它之后就能找到与它关联的文件,就可以操作我们的文件了。
8. 如果我们打开多个文件,就会产生多个文件信息区,每个文件信息区都需要这样子一个文件指针来指向它。

总而言之:

1 打开一个文件 ->  2 内存里面就会创建一个对应关联的文件信息区 -> 3 文件信息区其实就是一个FILE类型的结构体 -> 4 结构体里面各个成员记录了该文件的种种信息 -> 5 这个结构体由FILE* 结构体指针来维护 -> 6 利用这个指针,什么事情都可以干了 

  

文件的打开与关闭 

1. 文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 

2. 在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系

fopen()函数 

1. 用fopen一旦打开文件之后,你会发现它的返回类型就是一个FILE*的指针
2. 其实,当这么打开一个文件的时候,内存里面就会创建一个文件信息区来与这个打开的文件关联,同时把文件信息区的地址/指针给你返回过来
3. fopen如果打开失败的话,就会返回一个空指针。因此可以判断一下,用perror,strerror也可以

fclose()函数 

 

1. 关闭文件用fclose,参数为一个FILE*指针

2. 你如果要关闭这个FILE*指针所指向的文件信息区(说白了就是一个结构体罢了)所对应的文件,你就把这个FILE*指针传给fclose。
3. 然后把这个FILE*指针置空,这个fclose是不会把FILE*指针置空的,你要自己手动置空,一定要把它置了。
4. 如果关闭成功,返回0;失败,返回EOF。 

文件的打开方式 

 

注: 用w的形式打开文件,如果这个文件里面有内容的话,会给你清空掉 

一个简单的实例演示 

 

 

 

绝对路径与相对路径 

1. 转义字符的斜杠是 \ , 而文件名或者路径的斜杠在代码里面我就直接写 / 。

2. 从根上开始写✍🏻,一直写到这个文件,这个叫做绝对路径,写的很详细。
3. 还有相对路径,也就是说相对于当前的路径的一种表示形式
4. 如果你的文件在上一级目录底下,你可以用. .\

5. 稍微了解一下,实在不行写绝对路径是绝对不会错的 

 

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

絕知此事要躬行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值