繁体   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