C ++用fstream替换二进制文件中的数据

时间:2018-11-21 14:03:21

标签: c++ fstream binaryfiles istream

我尝试使用C ++和fstream库替换二进制文件中的数据。是否可以使用此库来做到这一点? 我想将地址:0xB07中的文件的一个字节更改为1。

我编写了以下代码段:

...

int address = 0xB07;
char * toChange = new char('0');

std::ifstream input(filename, std::ios::binary);
input.seekg(address);
input.read(toChange, 1);
input.close();

*toChange = (char)0x01;

std::ofstream output(filename, std::ios::binary);
output.seekp(address);
output.write(toChange, 1);
output.close();

...

我已经尝试了该代码的许多版本,但我仍然不明白为什么字节没有变化。

1 个答案:

答案 0 :(得分:0)

此代码将删除您的文件,并在其中添加全新的内容。 问题出在

std::ofstream output(filename, std::ios::binary);

那是因为默认的打开模式是ios::out | ios::trunc(例如,请参见Input/Output with files)。 这意味着文件被截断为零字节。

然后您的seek()函数将其扩展到指定的大小(通常用零填充),最后output.write()在最后写入字节。

为了完成您想做的事情,我必须指定以下流标志:std::ios::binary|std::ios::out|std::ios::in

我目前无法确定为什么需要std::ios::in,对不起...