[英]Writing and reading vector into binary files
我有一個向量:
class Element
{
public:
string pathName;
ui64 offsitePtr;
ui64 subPage;
public:
Element(void);
~Element(void);
};
vector<Element> elem;
elem
的大小將被控制為小於4096字節。 在節目的最后,我應該fwrite
elem
成一個二進制文件。 我當前正在使用的解決方案是制作一個char緩沖區並將元素寫入其中的elem
中。 我認為這不是一個好主意。 還有其他好主意嗎?
只要您不直接從內存中寫出vector或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) );
}
當您閱讀時,您也會做類似的事情。 將使您無法解決=)請注意,在每種情況下,您都在寫一個大小,然后寫數據。 閱讀時,您會讀入大小,然后在讀取內容之前調整結構的大小。
哦,請確保您以二進制模式打開文件流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.