我有一个矢量:
class Element
{
public:
string pathName;
ui64 offsitePtr;
ui64 subPage;
public:
Element(void);
~Element(void);
};
vector<Element> elem;
elem
的大小将控制在4096字节以下。在程序结束时,我应该fwrite
elem
进入二进制文件。我目前使用的解决方案是创建一个char缓冲区并在其中写入elem
中的元素。我不认为这是个好主意。还有其他好的想法吗?
答案 0 :(得分:0)
如果您不直接从内存中写入向量或Element
,那没关系。您需要序列化任何非POD(普通旧数据)的内容。在您的情况下:vector
和string
。
向量很简单,因为你可以为Element
创建一个函数。但是你可能想要序列化矢量大小:
ofstream& WriteVec( ofstream& s, vector<Element> &elem )
{
size_t size = elem.size();
s.write( (char*)&size, sizeof(size) );
for( int i = 0; i < size; i++ )
elem(i).Write(s);
return s;
}
对于你的元素:
ofstream& Element::Write( ofstream& s )
{
// Serialize pathName
size_t strsize = pathName.size();
s.write( (char*)&strsize, sizeof(strsize) );
s.write( pathName.c_str(), strsize );
// Serialize other stuff
s.write( (char*)&offsitePtr, sizeof(offsitePtr) );
s.write( (char*)&subPage, sizeof(subPage) );
}
当你阅读时,你会做类似的事情。会留下你的工作=)注意在每种情况下,你正在写一个大小,然后是数据。阅读时,您会读取大小,然后在将内容读入之前调整结构大小。
哦,确保以二进制模式打开文件流。