CFile::Write(struct结构)的问题

seas110 2007-07-16 05:29:18
struct StrTest
{
UINT ID
vector<int> vec;
};


StrTest op;
op. ID = 1;
op.vec.push_back(10);
CFile file;
file.Write(&op, sizeof(op)); //这里并没有把10写进去,好像只是把vec的地址写进去


//请问: 怎样把vec的内容也写进去..
StrTest opRead;
file.Read(&opRead, ..);
opRead.ID =
opRead.vec[0] = //可以顺利读出来


谢谢

...全文
287 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
emptyness 2007-07-16
  • 打赏
  • 举报
回复
序列化 是安全点。。一般类,结构存文件里都是用的MFC的序列化,MSDN上有很详细的解释了。
百度下也有很多代码。


CFile open没??

file.Write(&op, sizeof(op)); //这里并没有把10写进去,好像只是把vec的地址写进去
改成:

file.Write(op.ID, sizeof(op.ID));
file.Write(op.vec,sizeof(op.vec));
把各个结构里的值都write一边,安全一些。不同的编译优化设置下sizeof(sVar)长度不一样。
或者你自己查下VC编译器 结构 sizeof的实现。

我想帮你,可是 我的file open一直返回失败,,我都要疯狂了。
换了几个工程都不行,什么玩意儿啊。。把杀毒软件,任何监视的东西关了也不行。。
看来这个问题,俺只能观望了。file open失败。这种问题。。。只能说是神的原因了。。
lyg_zy 2007-07-16
  • 打赏
  • 举报
回复
lz,基础太差了,努力吧。

/**
* 赋值
*/
StrTest op;
op.ID = 1;
op.vec.push_back(10);
op.vec.push_back(20);

/**
* 写文件
*/
{
CFile file;
//.....打开文件....
file.Write( &op.ID,sizeof(op.ID) );
size_t size = op.vec.size();
file.Write( &size,sizeof( size ) );
for( size_t i = 0;i< size ;i++ )
{
file.Write(&op.vec[i], sizeof(op.vec[i])); //这里并没有把10写进去,好像只是把vec的地址写进去
}
}


/**
* 打开文件
*/
{
CFile file;
//....打开文件....
StrTest opRead;
file.Read(&opRead.ID,sizeof(opRead.ID ) );
size_t size = 0;
file.Read( &size,sizeof(size ) );
int nRead = 0;
for( size_t i = 0;i<size;i++)
{

file.Read(&nRead, sizeof(nRead));
opRead.vec.push_back( nRead );
}
}

handsomerun 2007-07-16
  • 打赏
  • 举报
回复
如果你这个结构体里面都是char数组
就没这样的问题了

可以用

fwrite (&op, sizeof(op),1,fptr);

另外,如果还有各种类型的数据都有,可能还牵涉到结构对齐阿什么的,麻烦的很
handsomerun 2007-07-16
  • 打赏
  • 举报
回复
写结构可能会有问题,他是把每个byte的内容都写进文件里


对于你这个int型来说,写入以后,就不是你要的10了


cpio 2007-07-16
  • 打赏
  • 举报
回复

可以用序列化,找找资料吧

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧