之前我们在程序当中使用的数据都是保存在内存当中
计算机的内存的特点就是读写的速度相对比较快,但是在内存当中的数据不能永久保存,如果程序执行之后或者在执行过程当中突然断电,那么内存当中的数据就会被清空
所以我们通常会把重要的数据保存在计算机的另外一个设备上,那就是硬盘
硬盘的特点就是读写的速度没有内存快,但是在硬盘上的数据可以永久的保存(前提是硬盘没有损坏),即便是在断电状态下,硬盘的数据也不会被清空
需要把数据写入到硬盘,我首先就应该了解一下文件的概念
文件我们可以理解为在硬盘上保存的数据块,我们在硬盘上标记一个数据块的位置,然后在这个数据块当中去保存我们的数据
一般这个过程是不需要我们手动的来干预的,操作系统会自动的帮助我们来完成,我们所需要做的就是利用c语言去调用操作系统的接口完成文件的读写操作
在c语言的标准库当中,对于文件的操作都被定义在了 stdio.h 标准库当中(我们之前使用过的格式化输入 scanf 和格式化输出 printf 都出现在这个库里面)
文件输入/输出 - cppreference.comzh.cppreference.com我们通常会把文件分为几种类型
- 文本文件:可以用字符编码解释成文本内容的文件
- 二进制文件:一般用来保存图片,视频或者可执行的程序,通常情况下如果用文本编辑器打开二进制文件会看到乱码,必须通过特定的应用程序才能打开二进制文件
文本文件和二进制文件在硬盘当中都是以二进制数据进行保存的,区别就在于,文本文件保存的数据可以通过字符编码进行解析,而二进制文件需要特定的程序才可以
我们编写的c程序就是文本文件,但是编译之后生成的可执行程序就是二进制文件
![1b9523bd8c08b57cfafc64a62dfecb58.png](https://i-blog.csdnimg.cn/blog_migrate/356fefe79052df3c461fa2fb47410d05.png)
![a0d73c954763461c101bacb51748cc2d.png](https://i-blog.csdnimg.cn/blog_migrate/c52cfebae9b7f5e064bf026e5e0de5dd.jpeg)
![d42f3cd0c8e2676ce6c8f1130d233f4b.png](https://i-blog.csdnimg.cn/blog_migrate/c530c5ada5d2e7a2e80ef6875ef49b59.png)
在 windows 操作系统当中文件都会有扩展名,通过扩展名系统会自动根据文件的扩展名选择合适的程序打开对应的文件
在 linux 操作系统当中我们打开一个文件就需要指定文件的打开方式
在c语言当中操作文件非常的简单,只需要找到硬盘上文件的指针位置,然后就可以写入数据,读取数据
c语言在 stdio.h 头文件当中定义了一个新的类型 FILE ,这是一个结构体,代表的就是硬盘上的文件,我们对于 FILE 结构体数据的操作,都会自动的映射到硬盘上的文件当中(这个过程由操作系统完成),我们的工作就是找到文件对应的 FILE 结构体,然后对他进行操作就可以了
FILE 结构体通常会被称为文件流,表示程序当中对于一个文件的映射
#include<stdio.h>
int main(){
FILE * fp = fopen("d:/ttt.txt","w");//创建一个FILE指针指向硬盘上的文件
fprintf(fp,"hello world"); //向文件当中写入内容
fclose(fp);
return 0;
}
这里通过 fopen 函数找到一个文件的指针 fp,可以认为是打开了一个文件,fp就指向了硬盘上 "d:/ttt.txt" 位置的文件
然后通过 fprintf 向文件当中写入内容"hello world"
最后使用 fclose 释放掉指针,相当于关闭文件
程序执行结束,就会在计算机的 d盘下面自动建立一个文件,文件名是 ttt.txt,里面的内容是 hello world
![af4def72447acd4a88bf76b209537ea9.png](https://i-blog.csdnimg.cn/blog_migrate/0e4c04db29abd341bf3741db425f53a2.png)
操作文件最重要的就是 fopen 函数,功能就是打开特定的文件,并返回指向关联到该文件的FILE指针
FILE * 文件指针 = fopen(文件名,打开模式);
fopen 的第二个参数指的是可以对文件进行的操作模式,通常会由以下几种
![75562ea08f66ac040f372bb948a8121c.png](https://i-blog.csdnimg.cn/blog_migrate/d502309d9e58242e850c5279ab807e3d.png)
同时还可以使用 t 或者 b 加在上述模式的后面表示打开的是文本文件(t)还是二进制文件(b),如果不加默认的是以文本方式打开
比如说,我们需要新建一个文件,并且向文件当中去写入内容,那么打开文件的模式就应该是 "w","w+",或者"wt",如果新建一个二进制文件,那么就应该是"wb","wb+"
我们可以使用 fprintf 函数向文件当中写入内容
f