文件输入输出
- 用>和<做重定向
- 使用FILE
FILE
- FILE *fopen(const char * restrict path,const char * restrict mode);
- int fclose(FILE *stream);
- fscanf(FILE* , …)
- fprintf(FILE* , …)
打开文件的标准代码
FILE *fp = fopen("file","r");//文件名,只读模式 if(fp){ fscanf(fp,...); fclose(fp); }else{ ... }
例子:(打开当前.c源代码目录下的1.txt文件中的数字并输出到终端。)
#include<stdio.h> int main(int argc,int *argv[]) { FILE *fp = fopen("1.txt","r"); if(fp) { int num; fscanf(fp,"%d",&num); printf("%d\n",num); fclose(fp); } else { printf("无法打开文件\n"); } return 0; }
fopen
第一个字符串参数为文件名,第二个字符串参数为模式
- r 打开只读
- r+ 打开读写,从文件头开始
- w 打开只写。如果不存在则新建,如果存在则清空
- w+ 打开读写。如果不存在则新建,如果存在则清空
- a 打开追加。如果不存在则新建,如果存在则从文件尾开始
- 在上述后面可以加x,代表只新建,如果文件已存在则不能打开
二进制文件
- 其实所有的文件最终都是二进制的
- 文本文件无非是用最简单的方式可以读写的文件
- 而二进制文件是需要专门的程序来读写的文件
- 文本文件的输入输出是格式化,可能经过转码
文本文件VS二进制文件
- 文本的优势是方便人类读写,而且跨平台
- 文本的缺点是程序输入输出需要经过格式化,开销大
- 二进制的缺点是人类读写困难,可能因为int的大小不一致,大小端等问题导致不跨平台
- 二进制的优点是程序读写快
程序为什么要文件
- 配置:Unix用文本,Windows用注册表
- 数据:稍微有点量的数据都放数据库了
- 媒体:通过二进制,现实是程序通过第三方库来读写文件,很少直接读写二进制文件了