使用ofstream用临时缓冲区写入文件

时间:2014-08-31 15:35:03

标签: c++ iostream

如何在不事先知道长度的情况下编写一系列以二进制开头的数字(以二进制形式开头)?

我可以将数字序列写入临时缓冲区(例如buf.write()),确定缓冲区长度,然后将缓冲区复制到ofstream(例如ofs << buf)?

1 个答案:

答案 0 :(得分:2)

由于您正在以二进制模式写入文件,因此请为数量保留一个位置。

例如,让我们有一个32位的数量值。我们可以在文件的开头写下:

uint32_t number_size = 0U;

// Open output file for read & write.
// Reserve space for the quantity by writing dummy value.
output_file.write((char *)&number_size, sizeof(number_size));

// Perform calculations & writing to file, incrementing "number_size"  

// Write the number size to the top of the file:
output_file.seekp(0, SEEK_BEG);
output_file.write((char *)&number_size, sizeof(number_size));

您可以将数量变量放在任何位置,只需记住其文件位置即可。完成后,寻找该位置并将其写入。