为什么它拒绝将整数的二进制写入文件?

时间:2018-06-13 09:50:43

标签: c++ binary

我遇到了这个问题 - 当我尝试将一个整数的二进制文件写入文件时,它不会将它写在Delivery文件中。

我的想法是取整数,将其转换为二进制,将其写入文件。之后,如果需要,我会回到程序,写一个新的整数值,然后将新值添加到已经写入的值。即文件中的“5”,返回,写入“3”,然后在文件中有8个。

以下是代码:

id_car | Site_car     | descr_car
-----------------------------------
4      | onesite      | onedesc
3      | twosite      | twodesc
7      | treesite     | onedesc
1      | onesite      | onedesc
2      | twosite      | twodesc
6      | treesite     | onedesc

1 个答案:

答案 0 :(得分:2)

使用ios::binary不会导致它将二进制数据写入文件,它只会禁用某些格式,例如,请参阅What the point of using std::ios_base::binary?

如果你想把一个整数写成二进制文件,我建议你使用这样的东西:

int foo = 0x0F00;
ofstream bar("test.txt", ios::out | ios::binary);
bar.write(reinterpret_cast<char*>(&foo), sizeof(int));
bar.close();

这将取整数,将其重新解释为字符序列并将其输出到文件而不进行格式化(此时需要ios::binary)。

看到你编辑了这个问题:你不能在磁盘上总结,你只能用字节写,这将覆盖之前的任何数据。要做你想做的事,你必须阅读数字,总结,然后再写下来。您可以使用foo.read(...)foo现在为fstream并使用ios::in打开,即可实现此目的。