/* 直接输入输出函数:
int fread(void*pointer,int size,int count,FILE*fp)
int fwrite(void*pointer,int size,int count,FILE*fp)
pointer是一个指针,在fread函数中它表示存放输入数据的首地址;在fwrite函数中,它表示存放输出数据的首地址
size表示数据的字节数
count表示要读出的数据个数
fp表示文件指针
*/
# include<stdio.h>
int main()
{
FILE*fp;
int iarray[6]={1,49,2,50,3,51},ia;
system("cls");
//clrscr();
if((fp=fopen("awe1.txt","w"))==NULL)
{
printf("Cannot open this file\n");
return 0;
}
else
{
fwrite(iarray,sizeof(iarray),1,fp);
fclose(fp);
}
if((fp=fopen("awe1.txt","r"))==NULL)
{
printf("Cannot open this file\n");
return 0;
}
else
{
while(!feof(fp))
{
fread(&ia,sizeof(ia),1,fp);
printf("%5d",ia);// printf("%5c",ia);
}
}
fclose(fp);
}
总结:
从结果看来,利用函数fwrite写入文件中的数据存储格式为二进制,利用fread函数读出。fwrite是将内存中的二进制数据直接写入文件中,而不发生字符转化,与格式化输入输出函数fscanf和fprintf是将内存中的二进制数据转化为ascii码后写入到文件,读出时又将码转化为二进制数。因此使用fwrite和fread效率会更高一些。
举个具体例子说明效率高的原因:
比如说整数103,它的二进制码为00000000 00110111,用fprintf格式化写入到文件中时,它要把103转为字符"103",然后把字符’1’,‘0’,'3’对应的二进制码写入到文件中,这样你打开文件看到的就是103了,fscanf正好这个操作顺序反过来,由于fwrite直接把整数103的二进制码存入文件,不经过上边那个转换过程,所以打开文件你看不懂是啥,如下图:
而且我们还可以看到,用fwrite更节省存储空间,你看上边存储整数103,fprintf要用3个字节,而fwrite仍然只需要2个字节即可,所以不仅时间效率高,而且空间效率也高