一、文件的储存形式
分为文本(ASCII码)文件与二进制文件两类。
文本文件
文件每一个字节存放一个ASCII码,代表一个字符。如整数123在文本文件中占3个字节。
二进制文件
将数据以其在内存中的形式原样存放。如整数123和整数1234在二进制文件中均占4个字节。
二、文件操作
//文件指针变量
FILE *fp;
//文件打开函数
FILE *fopen(const char *filename,const char *mode);
//返回值为一个文件指针变量
//参数为文件名及使用方式
//文件关闭函数
int fclose(FILE *fp);
//返回值为0(成功关闭)或非零值(关闭失败)
//参数为文件指针
//从文件读入
int fscanf(FILE *fp,const char*format,...);
//例
fscanf(fp,"%d,%f",&i,&a);
//输出到文件
int fprintf(FILE *fp,const char*format,...);
//例
fprintf(fp,"%d,%f",a,b);
//容错处理
//如,当文件指针为空时终止进程
if((fp=fopen("input.txt","w"))==NULL){
printf("文件打开失败!");
exit(0);
}
//exit(0)为正常退出
//exit(非零值)为异常退出
//从文件读入字符
int fgetc(FILE *fp);
//返回值为一个字符
//如果读到文件结束符则返回EOF
//输出字符到文件
int fputc(int ch,FILE *fp);
//返回值为一个字符(如果成功写入)或EOF
//检测文件位置函数
int feof(FILE *fp);
//如果读到文件尾返回非零常数,否则返回0
//从文件读入字符串
char *fgets(char *str,int n,FILE *fp);
//读入最多n-1个字符并在末尾添加' ',然后存入str
//返回值为字符串首地址
//输出字符串到文件
int fputs(const char *s,FILE *fp);
//返回值为一个非负数(如果成功输出),否则返回EOF
//读写数据块
//从文件读入学生数据
for(int i=1;i<=30;i++)
fread(&stu[i],sizeof(struct student),1,fp);
//输出学生数据到文件
for(int i=1;i<=30;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
文件使用方式 | 含义 |
---|---|
"r"(只读) | 打开文本文件(输入) |
"w"(只写) | 打开文本文件(输出) |
"a"(追加) | 向文本文件尾加数据 |
"rb"(只读) | 打开二进制文件(输入) |
"wb"(只写) | 打开二进制文件(输出) |
"ab"(追加) | 向二进制文件尾加数据 |
"r+"(读写) | 打开文本文件 |
"w+"(读写) | 新建文本文件 |
"a+"(读写) | 打开文本文件 |
"rb+"(读写) | 打开二进制文件 |
"wb+"(读写) | 新建二进制文件 |
"ab+"(读写) | 打开二进制文件 |
以"w"方式写入:
如果文件已经存在,则删去原文件并重新建立;否则新建一个文件
以"a"方式写入:
如果文件已经存在,则在原数据末尾写入新数据;否则新建一个文件