【发布时间】:2019-04-24 03:01:30
【问题描述】:
我尝试使用 C++ 和 fstream 库替换二进制文件中的数据。这个库可以做到这一点吗? 我想将地址:0xB07 中的一个字节文件更改为 1。
我写了如下代码sn-p:
...
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();
...
我已经尝试了许多版本的这段代码,但我仍然无法理解为什么字节没有改变。
【问题讨论】:
-
由于您没有提供我们可以自己尝试的Minimal, Complete, and Verifiable example,因此我们仅限于您的描述。那么“它不起作用”是什么意思?你收到一些错误信息吗?有什么意想不到的事情发生? (这是什么?)
-
对不起。 “它不起作用”意味着字节没有被替换。例如,我可以在十六进制编辑器中检查它们。
-
尝试在写入部分添加错误检查。也许该文件实际上不可写?至少它会告诉你哪个部分失败了。
-
我希望我的问题现在更好了。如何添加错误检查?我试图检查 output.bad() 但它返回 false。
-
ofstream 构造函数会失败吗?它如何表示失败?检查它。 seekp 会失败吗?它是如何...(等)要回答如何,请查看参考cplusplus.com/reference/fstream/ofstream
标签: c++ fstream binaryfiles istream