繁体   English   中英

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

[英]C++ replace data in binary file with fstream

我尝试使用 C++ 和 fstream 库替换二进制文件中的数据。 这个库可以做到这一点吗? 我想将 address: 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();

...

我已经尝试了此代码的许多版本,但我仍然无法理解为什么字节没有改变。

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

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

那是因为默认的打开模式是ios::out | ios::trunc ios::out | ios::trunc (参见例如: 带有文件的输入/输出)这意味着文件被截断为零字节。

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

为了做你想做的事,我必须指定以下 ofstream 标志: std::ios::binary|std::ios::out|std::ios::in

我目前不能确定为什么需要std::ios::in ,抱歉......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM