因为数据如果只存储在内存中,程序结束后数据就被摧毁了,为了能够让数据持久化的保留,这里就需要把数据存储在文件中,需要使用的时候直接从文件中读取出来使用。
一、文件指针
在内存中有个专门来进行文件交互的区域,使用FILE*类型的指针来控制操作文件,FILE *是个结构体指针。
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
流(stream):
流是一个很抽象的概念,可以理解为水流,为了方便所有外部设备的输入和输出,在其连接的上层封装了一个流。当程序需要读取数据的时候,就会开启一个通向数据源的流。这个数据源可以是文件,内存,或是网络连接。
类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在其中“流”动一样。
其包括文件流、标准输入流(stdin 键盘)、标准输出流(stdout 屏幕)、标准错误流(stdrerr 屏幕)
那么对于操作文件来说,就要使用文件的流。
FILE* pf=fopen("test.txt","r");//以读的方式打开文件
这里pf指针就可以理解为打开了文件test.txt并与文件流产生了连接。注意这里最好判断pf是不是为NULL,如果为NULL说明打开文件失败
if(pf==NULL)
printf("文件打开失败\n");
这样就可以从文件读取数据或者写入数据了。而这里根据fopen()的第二个参数,来选择对文件的具体操作
字符串 |
说明 |
r |
以只读方式打开文件,该文件必须存在。 |
r+ |
以读/写方式打开文件,该文件必须存在。 |
rb+ |
以读/写方式打开一个二进制文件,只允许读/写数据。 |
rt+ |
以读/写方式打开一个文本文件&#x |