0

我正在用 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

4

3 回答 3

0

相关标志被截断

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

于 2012-04-10T04:27:48.890 回答
0

您需要添加std::ios::trunc到您的开放参数,如:

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

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

于 2012-04-10T04:28:20.073 回答
0

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

于 2012-04-15T21:50:59.667 回答