我有一个对象列表,我想将它们存储在一个尽可能小的文件中,以便以后检索。我一直在仔细阅读本教程,并且开始(我认为)理解,但有几个问题。这是我正在使用的片段:
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));
不编译?i 是一个迭代器(迭代器不是指针吗?)。或者干脆
historyFile.write(i,sizeof(Referral));
为什么我仍然需要搞乱地址?我不是将数据存储在文件中吗?如果地址/值自行持续存在,为什么我不能只存储以纯文本分隔的地址,而不是稍后获取它们的值?
我还应该使用 .txt 扩展名吗?<edit>那我应该用什么代替呢?我尝试了 .dtb 并且无法创建该文件。</edit>实际上,我什至无法使用 ios::binary 标志打开文件而不会出现错误。我在传递文件名时也遇到了麻烦(作为字符串类字符串,由 c_str() 转换回来,它可以编译但会出错)。
抱歉这么多小问题,但基本上都概括为如何有效地将对象存储在文件中?