我尝试使用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();
...
我已经尝试了该代码的许多版本,但我仍然不明白为什么字节没有变化。
答案 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
,对不起...