我正在尝试打开一个需要附加一些数据的二进制输出文件。我不能顺序输出数据,所以我需要能够在文件流中寻找并且不能使用std::ios::app
标志。
不幸的是,当打开没有标志的输出文件流时std::ios::app
,文件在打开时会被截断。这是一些示例代码:
#include <iostream>
#include <fstream>
int main() {
std::ofstream file("output.bin", std::ios::binary | std::ios::ate);
std::streamoff orig_offset = file.tellp();
std::cout << "Offset after opening: " << orig_offset << std::endl;
file.seekp(0, std::ios::end);
std::streamoff end_offset = file.tellp();
std::cout << "Offset at end: " << end_offset << std::endl;
file << "Hello World" << std::endl;
std::streamoff final_offset = file.tellp();
std::cout << "Offset after writing: " << final_offset << std::endl;
return 0;
}
我希望每次执行都将“Hello World”附加到文件中。但是,文件一打开就会被截断。
我究竟做错了什么?如果这是 Visual Studio 中的错误,是否有任何解决方法?
编辑:每次程序运行时,无论文件是否存在或已经有内容,程序都会输出:
Offset after opening: 0
Offset at end: 0
Offset after writing: 12