std::ofstream 打开文件并替换为特定的偏移量
std::ofstream open file and replace in specific offset
我想打开一个文件(不重新创建它)并写入特定的偏移量。
这是当前代码:
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
标志,它会在我打开文件时重新创建文件。
如何在不重新创建它的情况下打开它并能够写入特定的偏移量?
it always writes to the end of file (probably due to the app flag)
是的,这是由于 app
标志。文档是这样说的:
app - seek to the end of stream before each write
If I don't use the app flag, it re-creates the file as I open it.
如果您在模式中设置了 out
或 trunc
标志,那么它会破坏文件的内容(如果它已经存在)。
How can I open it without re-create it and be able to write to specific offset ?
您可以使用in|out
。如果文件不存在,这将出错;如果存在,文件将被打开并从头开始读取。如果你想从最后读取流,你可以额外设置 ate
标志。
所有这些都清楚地记录在案here;阅读手册真的很有帮助。
我想打开一个文件(不重新创建它)并写入特定的偏移量。
这是当前代码:
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
标志,它会在我打开文件时重新创建文件。
如何在不重新创建它的情况下打开它并能够写入特定的偏移量?
it always writes to the end of file (probably due to the app flag)
是的,这是由于 app
标志。文档是这样说的:
app - seek to the end of stream before each write
If I don't use the app flag, it re-creates the file as I open it.
如果您在模式中设置了 out
或 trunc
标志,那么它会破坏文件的内容(如果它已经存在)。
How can I open it without re-create it and be able to write to specific offset ?
您可以使用in|out
。如果文件不存在,这将出错;如果存在,文件将被打开并从头开始读取。如果你想从最后读取流,你可以额外设置 ate
标志。
所有这些都清楚地记录在案here;阅读手册真的很有帮助。