一丶了解文件
我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤文件。
磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。
二丶流
三丶关于文件的函数
1.fopen 和 fclose
文件类型指针,简称文件指针,取名为“ FILE ”,定义一个FILE类型的指针 *pf 指向文件的文件信息区(结构体变量,这个结构体内部细节不必多了解)
FILE *pf
文件的打开和关闭,打开方式是(我们先创建一个FILE类型的指针变量),FILE *pf = fopen("文件路径","打开方式(图二)"),关闭文件的方式是 fclose(文件指针),关闭之后记得将指针指向NULL。
#include<stdio.h>
int main()
{
FILE *pf = fopen("data.txt","w+");
fclose(pf);
pf = NULL;
}
2.顺序读和写
我们主要了解前六个函数,读:从文件中读取字符或者文本;写:从外部写入文件。
fgetc函数读取一个字符,函数会返回这个字符(int形式)。
先看到我这个test文件有一个data.txt文件,里面事先写了一句“ Hello ”
这里可以看到确实从文件中读取了一个字符“ H ”,此时文件内部指针指向的就是“ H ”,再次使用函数时,指针就指向了“ e ”,这里我想说的是,文件内部指针只有一个,读和写共用一个指针。
fputc()函数就不说了,形式为 fputc("字符","文件指针"),接下来看看 fputs("字符串","文件指针"),紧跟刚刚的fgetc,我们仍然读到了“ H ”,然后我用了rewind()函数(将文件内部指针重新指向初始处),然后再 fputs 函数输入字符串到文件中去,覆盖了之前的内容。
而fgets(接收字符串数组,最大字符串长度,文件指针)函数就是读字符串放在某个地方。
3.随机读和写
之前提到的读写都是顺序读写,接下来接受几个随机读写函数。
fseek(文件指针,偏移量,起始位置),这个函数是根据⽂件指针的位置和偏移量来定位⽂件指针。这里的起始位置不是特指文件起始位置,是根据下图确定起始位置的。SET是文件开头,CUR是文件内部指针当前位置,END则是文件末尾。
事实证明,我们将文件内部指针从Y偏移了四个位置指向了S
ftell(文件指针)返回文件指针相对于起始位置的偏移量,由于刚才读取了一次文件的字符串,没有用rewind()将指针调回去,所以相对于起始位置偏移了十个位置,打印出来的就是10了
rewind(文件指针),这个函数刚刚我们一直在用,也不用单独介绍了。