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

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

2012-01-15 
CFile::Write(struct结构)的问题structStrTest{UINTIDvector intvec}StrTestopop.ID1op.vec.push_b

CFile::Write(struct结构)的问题
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]   =     //可以顺利读出来


谢谢



[解决办法]

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

[解决办法]
写结构可能会有问题,他是把每个byte的内容都写进文件里


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



[解决办法]
如果你这个结构体里面都是char数组
就没这样的问题了

可以用

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

另外,如果还有各种类型的数据都有,可能还牵涉到结构对齐阿什么的,麻烦的很
[解决办法]
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 );
}
}


[解决办法]
序列化 是安全点。。一般类,结构存文件里都是用的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失败。这种问题。。。只能说是神的原因了。。

热点排行