用fstream和seekp替换二进制文件中的数据

时间:2011-04-01 10:32:30

标签: c++ stream

我正在编写一个方法来替换二进制文件中的指定字符串,它在我使用seekp设置的位置之前写入NULL,然后写入字符串并关闭流。我只想替换文件中的一些字节。在这段代码之前,我尝试使用ofstream与ios :: binary和ios :: out标志。销毁文件中的所有数据有什么问题? 在这段代码之前,我用ifstream实例打开文件,读取相同的位置,验证字符串中的第一个字节。我只是对此进行评论以获取信息。

谢谢大家!

代码:

fstream ofs();
ofs.open(nomArchBin,ios::in | ios::out | ios::binary);

if (!ofs.good()) {
    cout << "...";
    return;
}

ofs.seekp(despEnArchivo,ios::beg);
char* registroChar = registroACadena(reg);
ofs.write(registroChar,cabecera.tamanioReg);

1 个答案:

答案 0 :(得分:3)

我知道这听起来很傻,但是打开文件进行写作的唯一方法 而不是截断它是打开它阅读:如果你是 真的在做ios::in | ios::out | ios::binary,它应该有效。 (但 因为你显然重新输入了代码,并没有复制/粘贴它,我是 不确定这是否真的是你做的。)

尝试寻求时必须注意的其他要点:

  • 文件必须以二进制模式打开,并充满“C” 语言环境。 (恕我直言,以二进制模式打开的文件应该忽略该语言环境, 但这不是标准所说的。)
  • `seekg`和`seekp`都有同样的效果;使用任何一个改变 对方的位置。
  • 允许寻找任意位置的唯一功能是 两个论点寻求;一个论证形式只能用于寻求 以前通过告诉获得的职位。