C语言文件操作之fread与fwrite

转载请注明出处:http://blog.csdn.net/zz420521/article/details/64138676 

fread与fwrite都是以二进制形式读取和写入文件中的数据

1. 函数原型

int fread(void *buffer,unsigned sife,unsigned count,FILE *fp)

2. 功能说明
  从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer指出的数据区中。
3. 参数说明
buffer:这是一个void型指针,指出要将读入数据存放在其中的存储区首地址。
sife:指出一个数据块的字节数,即一个数据块的大小尺寸。
count:指出一次读入多少个数据块(sife)。
fp:这是个文件指针,指出要从其中读出数据的文件。
4.返回值
  正常返回:实际读取数据块的个数,即count。
  异常返回:如果文件中剩下的数据块个数少于参数中count指出的个数,或者发生了错误,返回0值。此时可以用feof()和ferror()来判定到底出现了什么
情况。

H. 以二进制形式写数据到文件中去

1. 函数原型

int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp)

2. 功能说明
  按二进制形式,将由buffer指定的数据缓冲区内的sife*count个数据写入由fp指定的文件中去。
3. 参数说明
buffer:这是一个void型指针,指出要将其中数据输出到文件的缓冲区首地址。
sife:指出一个数据块的字节数,即一个数据块的大小尺寸。
count:一次输出多少个数据块(sife)。
fp:这是个文件指针,指出要从其中读出数据的文件。
4.返回值
  正常返回:实际输出数据块的个数,即count。
  异常返回:返回0值,表示输出结束或发生了错误。

例子:

#include <stdio.h>
#include <iostream>
using namespace std;

struct worker
{ int number;
    char name[20];
    int age;
};

void main()
{
    struct worker wk;
    int n;
    FILE *in,*out;
    if((in=fopen("E:\\VS_projects\\file_test\\1.txt","rb"))==NULL)
    {
        printf("The file %s can not be opened.\n","1.txt");
        return;
    }
    if((out=fopen("E:\\VS_projects\\file_test\\2.txt","wb"))==NULL)
    {
        printf("The file %s can not be opened.\n","2.txt");
        return;
    }
	printf("size of int is %d\nsize of char is %d\n",sizeof(int),sizeof(char));
    while(fread(&wk,sizeof(struct worker),1,in)==1)
	{
        fwrite(&wk,sizeof(struct worker),1,out);
		cout<<wk.number<<"---"<<wk.name<<"---"<<wk.age<<endl;
	}	
    fclose(in);
    fclose(out);
	getchar();
}

其中,1.txt输入内容为: 01 zzzzzzzzzzzzzzzzzzzk 65  

中间用空格表示。debug下,size of int is 4,size of char is 1。说明在此系统下,int占4个字节,char占一个字节。

1.txt在debug下的值为wk.number:0x20313020,wk.name:zzzzzzzzzzzzzzzzzzzk,wk.age:20353620,number和age显示的是16进制的ascll码,对应char型的_10_和_56_(_表示空格),输入的1.txt中的内容_01_与_65_实际上都是以字符char存储,故debug下会显示其对应的ascll码值,而且是低位在前,高位在后。而在stdout的cmd窗口中显示的是540094496和540358176,恰好是_01_与_65_所组成的ascll码的十进制显示。

最后,2.txt当中显示的内容即为1.txt的内容: 01 zzzzzzzzzzzzzzzzzzzk 65 

因此,要注意显示格式的问题和位数摆放先后顺序的问题。


猜你喜欢

转载自blog.csdn.net/zz420521/article/details/64138676