首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

如何 用 fstream 读取二进制格式文件的一行

2012-02-12 
怎么 用 fstream读取二进制格式文件的一行?怎么用fstream读取二进制格式文件的一行?一行代表一个类,其中有

怎么 用 fstream 读取二进制格式文件的一行?
怎么   用   fstream     读取二进制格式文件的一行?一行代表一个类,其中有各个数据成员。
    请问我的这种存储方式合理吗?二进制格式文件,一行一个类,如果某行有错误,丢弃,再读下一行,也就是下一个类的数据。这样可以清楚边界问题。

[解决办法]
所以,在你的情况下:

input_file.read( (char *)(&classbuffer), sizeof(class) ); //读取一个类的数据
[解决办法]
要把类或结构体的实例内容写入文件中,最好成员变量都是基本的数据类型,不要有指针类型,否则需要做序列化的工作了.

其实二进制文件,一般就以数据的长度来写入和读取,不需要关心是否换行的问题.

struct rectangle
{
int height;
int width;
};

rectangle rr;
//把结构体数据写入文件中
for(int i =0 ;i <10;++i)
{
rr.height = 10+i;
rr.width = 10+i;
outfile.write((char*)&rr,sizeof(rr));
}
//读取文件中的结构体数据
while(!infile.eof())
{
rectangle rtemp;
infile.read((char*)&rtemp,sizeof(rtemp));
if(infile.fail())
break;
//do something.....
}

////////////////////////////////////////////////////////////
网络发送就是发送一段内存数据,其实跟把数据写入文件中差不多
char szSendBuff[1400];
memset(szSendBuff,0,sizeof(szSendBuff));
//先把要发送的数据COPY到发送缓冲块中,
memcpy(szSendBuff,&rr,sizeof(rr));

然后把发送缓冲块的地址和有效数据长度,给socket的send()即可.


热点排行