Потоки двоичных файлов ввода-вывода С++: значение по умолчанию, если вывод не указан

Мой вопрос касается ввода-вывода двоичных файлов. Предположим, что выполняется следующий код:

#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, но я бы хотел этого избежать.


person John    schedule 07.06.2011    source источник
comment
На самом деле не определено, какими будут эти значения — они не обязательно должны быть нулевыми.   -  person    schedule 07.06.2011
comment
Я помню, что была функция для установки символа заполнения. Я не знаю, если это то, что вы ищете, хотя.   -  person Maxpm    schedule 07.06.2011
comment
@Maxpm: вы думаете о setfill(), который используется для форматированного ввода-вывода, когда ширина поля, указанная с помощью setw(), превышает количество фактически необходимых символов.   -  person HighCommander4    schedule 08.06.2011


Ответы (2)


Вы можете написать оболочку для 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
}
person HighCommander4    schedule 07.06.2011

Вместо того, чтобы искать и записывать значение в виде char с помощью ‹‹, что, если вы выделяете массив char buf[4], устанавливаете желаемое значение «заполнения» для всех элементов, а затем просто обновляете первый/последний элемент нужным значением и call out.write(buf, 4)?

person ribram    schedule 08.06.2011