我有一个对象列表,我想存储在一个尽可能小的文件中以便以后检索。我一直在仔细阅读this tutorial,并开始(我认为)了解,但有几个问题。这里是我一起工作的片段:C++在一个文件中存储对象
static bool writeHistory(string fileName)
{
fstream historyFile;
historyFile.open(fileName.c_str(), ios::binary);
if (historyFile.good())
{
list<Referral>::iterator i;
for(i = AllReferrals.begin();
i != AllReferrals.end();
i++)
{
historyFile.write((char*)&(*i),sizeof(Referral));
}
return true;
} else return false;
}
现在,这是从片段
file.write((char*)&object,sizeof(className));
本教程所改编。现在我相信它正在做的是将对象转换为一个指针,取值和大小并将其写入文件。但是如果这样做,为什么还要花费这些转换呢?为什么不从一开始就拿这个价值?为什么它需要大小?此外,从我的理解那么,为什么
historyFile.write((char*)i,sizeof(Referral));
不能编译?我是一个迭代器(而不是一个指针的迭代器?)。或干脆
historyFile.write(i,sizeof(Referral));
为什么我需要乱搞地址呢?我不是将数据存储在文件中吗?如果地址/值自己保持不变,为什么我不能将地址以纯文本格式存储,并且稍后再取其值?
而且我还应该使用.txt扩展名吗? <编辑>我应该用什么来代替呢?我试过.dtb,但无法创建文件。 < /编辑>我实际上甚至不能使用ios :: binary标志打开没有错误的文件。我也无法传递文件名(作为一个字符串类字符串,由c_str()转换回来,它编译但给出错误)。
对不起,有这么多的小问题,但它基本上总结到如何有效地存储对象在文件中?
此外,序列化是否会显着提升存储效率,因此它比纯文本存储更有价值?我意识到这取决于,但相对? – 2009-09-28 19:07:13