如何从二进制文件读取多个结构

芭贝尔·宙斯·布莱约

我已经写了一个名为Cookie的结构的两个实例ck1,ck2,并通过调用一个函数将它们保存在一个名为“ mydat”的二进制文件中:

bool s_cookie(Cookie myck,std::string fname) {

std::ofstream ofs(fname,std::ios::binary | std::ios::app);
if(!ofs) return false;

ofs.write((char *) &myck, sizeof(Cookie));

ofs.close();

return true;

}

当然,myck可以是ck1,ck2等,而fname代表“ mydat”二进制文件。因此,这两个结构都已保存在同一文件中。现在我想将它们分别读回ck3和ck4。我怎么做?Cookie看起来像这样:

struct Cookie {
    std::string name;
    std::string value;
    unsigned short duration;
    bool expired;
};

谢谢

马苏德

如果是POD ,则类似于编写但阅读它们Cookie

std::ifstream ifs(fname,std::ios::binary);

Cookie ck3, ck4;

ifs.read((char *) &ck3, sizeof(Cookie));
ifs.read((char *) &ck4, sizeof(Cookie));

另外,您应该检查每个打开和读取操作的结果并进行处理。


更新:更新后看到Cookie,您不能简单地将其写入文件。您应该对其进行序列化或制定明确的协议以读取/写入数据。

一个简单的解决方法是(阅读评论):

// Assume name and value are not longer that 99
// and you don't care about wasted space in the file

struct CookiePOD {

    CookiePOD(const Cookie &p)
    {
      // I ignored bound checking !
      std::copy(p.name.begin(), p.name.end(), name);
      name[p.name.size()] = 0;

      std::copy(p.value.begin(), p.value.end(), value);
      value[p.value.size()] = 0;

      duration = p.duration;
      expired = p.expired;
    }  

    char name[100];
    char value[100];
    unsigned short duration;
    bool expired;
};

然后尝试读取/写入CookiePOD而不是Cookie

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从二进制文件读取多个结构

来自分类Dev

读取结构化二进制文件c ++

来自分类Dev

无法从二进制文件中读取结构

来自分类Dev

如何在C中将二进制文件读取到结构

来自分类Dev

如何从Rust中的二进制文件读取C结构?

来自分类Dev

如何根据从二进制文件读取的数据动态分配结构字段?

来自分类Dev

二进制文件写入顺序如何结构?

来自分类Dev

如何更新二进制文件中的结构项

来自分类Dev

如何使用VBScript从二进制文件读取

来自分类Dev

如何优化C ++二进制文件读取?

来自分类Dev

如何在Julia中读取二进制文件?

来自分类Dev

如何从dicom文件读取二进制数据?

来自分类Dev

读取时如何移入二进制文件?

来自分类Dev

如何使用VBScript从二进制文件读取

来自分类Dev

如何逐字节读取二进制文件?

来自分类Dev

如何使用 WINAPI 读取整个二进制文件?

来自分类Dev

Word文件的二进制结构

来自分类Dev

二进制文件如何“二进制”?

来自分类Dev

大块读取二进制文件

来自分类Dev

从二进制文件读取

来自分类Dev

从二进制文件读取char *

来自分类Dev

从MongoDB读取二进制文件

来自分类Dev

从二进制文件读取

来自分类Dev

读取二进制文件c

来自分类Dev

读取大型二进制文件

来自分类Dev

读取/写入二进制文件

来自分类Dev

分批读取二进制文件

来自分类Dev

从二进制文件中读取

来自分类Dev

读取整数的二进制文件