Jon*_*ert 13 c++ file append stream seek
我正在尝试打开二进制文件进行写入而不删除内容.但我不想写给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();
Run Code Online (Sandbox Code Playgroud)
如果使用app,搜索不起作用.如果不使用app打开文件擦除数据.有人知道答案吗?
Nim*_*Nim 11
尝试第二次重载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);
}
}
Run Code Online (Sandbox Code Playgroud)
当使用ios :: app打开时,就好像您打开一个恰好附加到现有文件的新文件:您无法访问现有文件.我不确定,因为我会像Kerrek的回答一样,但是如果你真的想尝试,你可能需要打开" ios :: in | ios :: out ",类似于fopen("test.txt") ,"rw").
或者像crashmstr指出的那样:ios :: out可能已经足够了.