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

C++ IO binary file streams: default value when output isn't specified

本文关键字:输出 默认值 未指定 IO 二进制文件 C++      更新时间:2023-10-16

我的问题是关于二进制文件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。如果我没有指定输出内容,我能以某种方式更改文件中的默认值吗?我想用30之类的东西替换00,这样binfile.bin就会包含30 30 30 4A 30 30 30 49,这可行吗?当然,我可以在文件末尾循环,并将所有00 s替换为30 s,但我希望避免这种情况。

您可以为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
}

而不是使用<lt;,如果分配一个char-buf[4]数组,为所有元素设置所需的"fill"值,然后用所需的值更新第一个/最后一个元素,并调用.write(buf,4),会怎么样?