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失败。这种问题。。。只能说是神的原因了。。