我正在尝试打开二进制文件进行写入,而不会擦除内容.但我不想写信给eof.我想写入一个特定的文件位置.
这是一个小小的例子:
ofstream out("test.txt",ios::binary | ios::app); for(int i = 0; i < 100; i++) out.put('_'); out.write("Hallo",5); out.close(); ofstream out2("test.txt",ios::binary | ios::app); out2.seekp(10); out2.write("Welt",4); out2.close();
如果使用app,seek不行.如果不使用应用打开文件擦除数据.有人知道答案吗?
解决方法
尝试第二个重载的seekp,它允许您提供一个偏移和方向,这可能是您的案例中的文件(即ios_base :: beg).这当然假定你知道你正在做什么,所有你想做的是覆盖现有的字符数.
编辑:这里是充分的工作实例:
#include <iostream> #include <fstream> using namespace std; int main() { { ofstream out("test.txt",ios::binary); for(int i = 0; i < 100; i++) out.put('_'); out.write("Hallo",5); } { fstream out2("test.txt",ios::binary | ios::out | ios::in); out2.seekp(10,ios::beg); out2.write("Welt",4); } }