std :: ofstream打开文件并替换特定的偏移量

时间:2015-03-16 09:22:05

标签: c++ std fstream ofstream

我想打开一个文件(不重新创建)并写入特定的偏移量 这是当前的代码:

std::ofstream file(conf_file_path, std::ios::app);
file.seekp(offset, std::ios::beg);
const auto& output = file.write(conf_str, conf_str_len);

但它总是写到文件的末尾(可能是由于app标志)
如果我不使用app标记,则会在我打开文件时重新创建该文件。

如何在不重新创建它的情况下打开它并能够写入特定的偏移量?

1 个答案:

答案 0 :(得分:2)

  

它总是写入文件的末尾(可能是由于app标志)

是的,这是由app标志引起的。这是文档所说的内容:

  

app - 在每次写入之前寻找流的结尾


  

如果我没有使用app标记,则会在我打开文件时重新创建该文件。

如果您在模式中设置了outtrunc个标志,那么它会破坏文件的内容(如果已存在)。

  

如何在不重新创建它的情况下打开它并能够写入特定的偏移量?

您可以使用in|out。如果文件不存在,这将会出错;如果存在,则将从头开始读取文件。如果您希望从末尾读取流,则可以另外设置ate标志。

所有这些都清楚地记录在案here;阅读手册确实有帮助。