繁体   English   中英

覆盖文件中的字节而不清除它

[英]Overwrite byte in file without clearing it

如何在不清除整个文件的情况下覆盖文件中的一个字节? 请注意,我不想插入额外的字节,而是在某个偏移量处覆盖一个字节。

我尝试了以下代码在某个偏移量处写入一个字节。 但是,这会清除指定偏移量之后的所有内容,这不是我想要的。

#include <fstream>

int main()
{
    std::ofstream ofs {"foo", std::ios::binary};
    ofs.seekp(0x2);
    ofs.put(0x7);
}

一般来说,SO 上的人似乎建议读取整个文件,然后在 memory 中更改它,然后再写出来。 然而,仅仅改变一个字节似乎工作量太大。

就地覆盖单个字节是不可能的吗?

如果您不想在当前文件末尾之前插入任何新字节,则更新文件是完全可能的(事实上很常见)。

改成这样

std::ofstream ofs {"foo", std::ios::in|std::ios::out|std::ios::binary};

但是,如果文件不存在,这将失败,但听起来这不是问题。

通过仅使用std::ios::binaryofstream构造函数将其调整为std::ios::out|std::ios::binary ),您破坏了文件内容。 然后,您的代码利用了 C/C++ I/O 的一个鲜为人知的特性,即可以在文件末尾之外进行查找。 如果文件在这个 state 中时写入了任何字节,则文件末尾和当前 position 之间的间隙用零填充。

这是有关不同文件模式的作用的参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM