C ++ IO二进制文件流:未指定输出时的默认值

时间:2011-06-07 18:41:53

标签: c++ stl fstream ofstream

我的问题是关于二进制文件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,但我想避免这种情况。

2 个答案:

答案 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)?