我的问题是关于二进制文件I / O.假设运行以下代码:
#include <iostream>
#inclide <fstream>
int main(){
fstream out;
out.open("binfile.bin",ios::binary|ios::out);
if(!out.good()){
cout<<"ain't good"<<endl;
return EXIT_FAILURE;
}
out.seekp(3);
out<<char(74);
out.seekp(7);
out<<char(73);
out.close();
}
binfile.bin包含00 00 00 4A 00 00 00 49
,如预期的那样。如果我没有指定要输出的内容,我可以以某种方式更改放入文件的默认值吗?我想用00
替换30
,以便binfile.bin包含30 30 30 4A 30 30 30 49
,这是可行的吗?当然,我可以在最后循环遍历文件并用00
替换所有30
s,但我想避免这种情况。
答案 0 :(得分:0)
您可以为seekp
编写一个包装器并使用它。伪代码:
my_seekp(fstream& f, int pos)
{
seek to end
endpos = position at end
if (pos > endpos)
{
int n = endpos - pos;
for (int i = 0; i < n; ++i)
f.put(char(30));
}
else
seek to pos
}
答案 1 :(得分:0)
不使用&lt;&lt;来寻找和写入值为char,如果你分配一个char buf [4]数组,为所有元素设置你想要的'fill'值,然后只需要更新第一个/最后一个元素你想要的值并调用out.write(buf,4)?