後で取得できるように、できるだけ小さなファイルに保存したいオブジェクトのリストがあります。私はこのチュートリアルを注意深く読んでおり、理解し始めています (と思います) が、いくつか質問があります。ここに私が取り組んでいるスニペットがあります:
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 拡張子を引き続き使用する必要がありますか? <編集>代わりに何を使用すればよいですか? .dtb を試しましたが、ファイルを作成できませんでした。< /edit> ios::binary フラグを使用すると、実際にはエラーなしでファイルを開くことさえできないようです。ファイル名を渡すのにも問題があります(c_str()によって変換された文字列クラス文字列として、コンパイルされますがエラーが発生します)。
些細な質問が多くて申し訳ありませんが、基本的には、オブジェクトをファイルに効率的に格納する方法に要約されますか?