Non*_*biz 3 c++ binary storage fstream object
我有一个对象列表,我希望将其存储在尽可能小的文件中,以便以后检索.我一直在仔细阅读本教程,并开始(我认为)理解,但有几个问题.这是我正在使用的代码片段:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,这是从片段改编而来的
file.write((char*)&object,sizeof(className));
Run Code Online (Sandbox Code Playgroud)
取自教程.现在我相信它正在做的是将对象转换为指针,获取值和大小并将其写入文件.但如果这样做,为什么还要费心去做转换呢?为什么不从头开始接受价值?为什么它需要大小?此外,根据我的理解,为什么呢
historyFile.write((char*)i,sizeof(Referral));
Run Code Online (Sandbox Code Playgroud)
不编译?我是一个迭代器(并不是一个迭代器指针?).或者干脆
historyFile.write(i,sizeof(Referral));
Run Code Online (Sandbox Code Playgroud)
为什么我还需要搞乱地址呢?我不是将数据存储在文件中吗?如果地址/值持续存在,为什么我不能只存储以纯文本形式分隔的地址而不是稍后获取它们的值?
我还应该使用.txt扩展吗?<edit>然后我应该使用什么?我试过.dtb并且无法创建文件.</ edit>我实际上甚至无法使用ios :: binary标志打开文件而不会出错.我也无法传递文件名(作为字符串类字符串,由c_str()转换回来,它编译但出错).
很抱歉这么多小问题,但这基本上总结了如何有效地将对象存储在文件中?