数据怎么在磁盘上写不是由文件打开方式决定的,而是由写函数决定的。数据怎么从磁盘上读也不是由文件打开方式决定的,而是由读函数决定的。
上面说的数据怎么写是指,一种类型的变量是怎么存的?比如int 12,可以直接存12的二进制码(4个字节),也可以存字符1,字符2.
数据怎么读的是指,我要读一个int变量,是直接读sizeof(int)个字节,还是一个字符一个字符的读,直到读到的字符不是数字字符。
C里面有两组文件读写函数恰好支持上面两种方式的读写:
1.二进制方式
fread(buffer,size,count,fp) fwrite(buffer,size,count,fp)。//用来读写一个数据块。它对应的是第一种存储方式。直接按类型的字节长度指定读写的字节数。
2.文本方式
fprintf函数和fscanf函数.它对应的是第二种读写方式。即以字符的方式读写。
fprintf函数、fscanf函数与printf函数、scanf函数的作用相仿,都是格式化读写函数。fprintf和fscanf函数的读写对象是磁盘文件,而printf和scanf函数的读写对象是终端。)
它们的一般调用格式为:
fprintf(文件指针,格式字符串,输出列表);//写函数
fscanf (文件指针,格式字符串,输入列表);//读函数
#include <stdio.h> void main(){ FILE *fp; char s[]= "This is a string.",s1[30]; char c = ' '; fp = fopen("file.txt","a"); fprintf(fp,"%s%c",s,c); fclose(fp); fp=fopen("file.txt","r"); fscanf(fp, "%[^ ] ", s1); printf("%s ",s1); fclose(fp); }
补充:文件结束符
文本文件适用:
EOF:通过#define EOF (-1) ,判断文件指针指向的值是否为EOF来判断是否结束
二进制适用:
feof(FILE *p):避免了二进制中需要的文件中出现-1二被EOF误判为结束符,出现的一种操作,遇到结束返回1,否则返回0.