在不截断的情况下打开二进制输出文件流
Opening a binary output file stream without truncation
我正在尝试打开一个二进制输出文件,我需要在其中附加一些数据。我无法按顺序输出数据,因此我需要能够在文件流中进行查找,并且不能使用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
您必须在输出和输入模式下打开文件:
std::fstream file("output.bin", std::ios::in | std::ios::out | std::ios::binary | std::ios::ate);
相关文章:
- 二进制搜索不适用于特定输出
- 输入 1024 后十进制到二进制转换的输出错误?
- 读取二进制文件时如何输出?
- 编译器将输出的流运算符<<解释为用于按位左移的二进制运算符<<
- C++实现代码中的字符串不应存在于输出二进制文件中.如何解决
- qDebug - 如何以位(二进制格式)输出数据
- 在C 中输出到二进制文件中的麻烦
- 如何获取与 objdump 输出的标签相对应的 ELF 二进制文件中的文件偏移量
- 二进制搜索 - 代码编译并运行后不显示输出
- Z3 C++ API 产生"unknown",而序列化输出上的二进制生成"unsat"
- 具有特征类型输出的特征二进制 Expr
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- 我如何知道谷物二进制输出的大小?
- 二进制搜索树的输出不正确
- 二进制输出到C++中随机位置的文件
- 此项目不会将整数读取为二进制并将其作为二进制输出到新文件
- 为什么 std::setbase(2) 不切换到二进制输出?
- 在不截断的情况下打开二进制输出文件流
- 如何使用 g++ 生成确定性的二进制输出
- g++二进制输出分析