【问题标题】:I am trying to write some file in binary, where I need to overwrite the file contents, how to over write instead of inserting我正在尝试用二进制文件编写一些文件,我需要在其中覆盖文件内容,如何覆盖而不是插入
【发布时间】:2012-04-10 04:25:53
【问题描述】:

我正在用 C++ 编写一个二进制文件,我在其中遍历到一个特定位置,需要用新的位置覆盖内容。我知道整数大小的内容,所以我跟踪位置并重写它。似乎,ofstream 写入函数插入或附加变量。有没有办法,我可以重写,而不是在文件中追加或插入

  long word = sizeof(int) + sizeof(long) + sizeof(long);

 std::ofstream file_write(filename, std::ios::out|std::ios::binary);

 file_write.seekp(word);      
 long pos = file_write.tellp();
 file_write.write((char *)&some_integer,sizeof(int));
 file_write.close()

 //some other location

 file_write.seekp(pos);
 file_write.write((char *)&some_other_integer,sizeof(int));

//这里 some_integer 应该被 some_other_integer 覆盖。有办法吗?

会是这样的

值1,值2,值3

我也许可以用值 5 替换值 2。

那么它应该看起来像

值1,值5,值3

【问题讨论】:

  • 如果您只是试图覆盖文件中的单个值,您显示的代码将起作用。您确定您显示的代码实际上代表您正在使用的代码吗?您确定代码不起作用吗?
  • 对不起,我想它是这样工作的,你是对的,我很困惑,有一个不同的问题。抱歉发帖的人,有没有办法删除帖子?
  • 嘿埃里克,它不是那样工作的。我删除它之前的信息并推送它之后的信息。有关更多代码,请参阅此链接。 stackoverflow.com/questions/10096196/…

标签: c++ file binaryfiles ofstream


【解决方案1】:

您需要在打开的参数中添加std::ios::trunc,如下所示:

std::ofstream file_write(filename, std::ios::out|std::ios::binary|std::ios::trunc);

这将截断文件,丢弃所有现有内容。

【讨论】:

  • 截断是做什么的?不过听起来很危险。我希望它重写确切的内容位置,而不是在两者之间插入值。
  • 对不起,我误解了你的问题。截断文件将删除文件的所有内容,这可能不是您想要在此处执行的操作。
【解决方案2】:

相关标志被截断

(truncate) 任何当前内容都被丢弃,假设长度为 打开时为零。

【讨论】:

    【解决方案3】:

    我整理好了。我们需要使用 fstream 而不是 ofstream。谢谢大家的帮助

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 2023-03-28
      • 2011-02-18
      • 1970-01-01
      • 2011-05-08
      • 2021-06-12
      • 2012-04-15
      相关资源
      最近更新 更多