C ++ IO потоки двоичных файлов: значение по умолчанию, когда выход не указан - PullRequest
1 голос
/ 07 июня 2011

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

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

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

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

0 голосов
/ 07 июня 2011

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