1

我的问题是关于二进制文件 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,这可行吗?当然,我可以在最后遍历文件并将所有00s替换为30s,但我想避免这种情况。

4

2 回答 2

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
}
于 2011-06-07T19:11:15.747 回答
0

如果您分配一个 char buf[4] 数组,为所有元素设置所需的“填充”值,然后使用您想要的值更新第一个/最后一个元素,而不是使用 << 寻找和写入值作为 char,该怎么办?调用 out.write(buf, 4)?

于 2011-06-08T19:10:17.343 回答