文件操作的套路大致为: 1. 打开文件 fopen 2. 读文件fread 3.写文件fwrite 4.关闭文件 fclose
1.打开文件 fopen
FILE * fopen ( const char * filename, const char * mode );
FILE 标准库中定义好的结构体, 如果打开文件失败, 返回值是NULL
FILE * fp = fopen("D:\a.txt","r");
fopen并没有读取文件内容, 而是根据路径找到磁盘上的文件, 然后在内存中创建一个结构体变量,使用这个结构体描述这个文件(结构体中的内容包括文件的属性等内容)
关于文件打开方式的选取:
文件使用方式 含义 如果指定的文件不存在
""r”(只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
“w”(只写) | 为了输出数据,打开一个文本文件 | 建立一个新的文件 |
“a”(追加) | 向文本文件尾添加数据 | 出错 |
“rb”(只读) | 为了输入数据,打开一个二进制文件 | 出错 |
“wb”(只写) | 为了输出数据,打开一个二进制文件 | 建立一个新的文件 |
“ab”(追加) | 向一个二进制文件尾添加数据 | 出错 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建议一个新的文件 | 建立一个新的文件 |
“a+”(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新的文件 |
“rb+”(读写) | 为了读和写打开一个二进制文件 | 出错 |
“wb+”(读写) | 为了读和写,新建一个新的二进制文件 | 建立一个新的文件 |
“ab+”(读写) | 打开一个二进制文件,在文件尾进行读和写 | 建立一个新的文件 |
fp 可称为"文件指针",也可称为"句柄"(handler)-->相当于遥控器的作用.
文件顺序读写:
功能 | 函数名 | 适用于 |
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 | fread | 文件 |
二进制输出 | fwrite | 文件 |
2. 读文件fread
读取N个字节:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
其返回值比预期小, 表示读取完毕;
size * count 是读取的字节个数;
3.写文件fwrite
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
其返回值小于预期,表示写完毕.
4.关闭文件fclose
int fclose ( FILE * stream );
关闭文件, 释放遥控器; 打开的文件必须要关闭,否则会出现内存泄漏.
fclose(fp);