[英]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.