簡體   English   中英

將向量寫入和讀取為二進制文件

[英]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的任何內容(純舊數據)。 在您的情況下: vectorstring

向量很容易,因為您可以為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM