gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:57:31 35 4
gpt4 key购买 nike

我正在编写一个方法来替换二进制文件中的指定字符串,它在我用 seekp 设置的位置之前写入 NULL,然后写入字符串并关闭流。我只想替换文件中的一些字节。在这段代码之前,我尝试使用带有 ios::binary 和 ios::out 标志的 ofstream。破坏文件中的所有数据有什么错?在这段代码之前,我使用 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);

最佳答案

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

其他在尝试搜索时需要注意的地方:

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

关于c++ - 用 fstream 和 seekp 替换二进制文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512154/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com