从 C++ 中的偏移量覆盖二进制文件的字节
Overwriting bytes of a binary file from an offset in C++
在此操作中,我首先复制我的源二进制文件。
然后我希望从特定偏移量开始覆盖复制文件中的字节。
我用 seekp(offset,std::ios::beg)
移动到所需的位置,然后用
开始覆盖过程
file.write(reinterpret_cast<const char*>(&my_vector[0]), my_vector.size()*sizeof(unsigned char));
然后关闭文件。
当我在十六进制编辑器中打开处理过的文件时,我在开始写入的偏移量之前看到的所有字节都是 zeros 并且我使用此操作写入的字节已成功写入。
流的模式是std::fstream(path, std::ios::out | std::ios::binary);
我在这个操作中遗漏了什么吗?
如果要保留旧内容,请以 in/out 模式打开它。即 ios::in | ios::out
.
此外,如果您使用的是 std::fstream
,这是默认行为,因此您可以直接使用:std::fstream(path, std::ios::binary)
.
在此操作中,我首先复制我的源二进制文件。
然后我希望从特定偏移量开始覆盖复制文件中的字节。
我用 seekp(offset,std::ios::beg)
移动到所需的位置,然后用
file.write(reinterpret_cast<const char*>(&my_vector[0]), my_vector.size()*sizeof(unsigned char));
然后关闭文件。
当我在十六进制编辑器中打开处理过的文件时,我在开始写入的偏移量之前看到的所有字节都是 zeros 并且我使用此操作写入的字节已成功写入。
流的模式是std::fstream(path, std::ios::out | std::ios::binary);
我在这个操作中遗漏了什么吗?
如果要保留旧内容,请以 in/out 模式打开它。即 ios::in | ios::out
.
此外,如果您使用的是 std::fstream
,这是默认行为,因此您可以直接使用:std::fstream(path, std::ios::binary)
.