Как сбросить (записать) содержимое IStream в файл (изображение)

У меня есть IStream который, как я знаю, содержит файл PNG, но я не могу записать его содержимое в файл, как обычный поток ввода-вывода, я не знаю, делаю ли я что-то не так или мне нужно сделать что-то другое для записи IStream в файл .

    IStream *imageStream;
    std::wstring imageName;
    packager.ReadPackage(imageStream, &imageName);      

    std::ofstream test("mypic.png");
    test<< imageStream;

person Am1rr3zA    schedule 20.09.2014    source источник
comment
Вам нужно использовать двоичные методы записи для данных изображения. << повредит файл в некоторых системах. Попробуйте std::ofstream test("mypic.png", std::ios::binary); test.write(...); Я не знаю, как работает IStream() для заполнения пробелов.   -  person Galik    schedule 20.09.2014


Ответы (1)


На основе ссылки IStream, которую вы дали здесь, есть некоторый непроверенный код, который должен делать примерно то, что вы хотите:

void output_image(IStream* imageStream, const std::string& file_name)
{
    std::ofstream ofs(file_name, std::ios::binary); // binary mode!!

    char buffer[1024]; // temporary transfer buffer

    ULONG pcbRead; // number of bytes actually read

    // keep going as long as read was successful and we have data to write
    while(imageStream->Read(buffer, sizeof(buffer), &pcbRead) == S_OK && pcbRead > 0)
    {
        ofs.write(buffer, pcbRead);
    }

    ofs.close();
}
person Galik    schedule 20.09.2014