如何获取IStream的长度?C++

5
我将按照以下方式创建IStream:

我正在创建一个IStream:

IStream* stream;
result = CreateStreamOnHGlobal(0, TRUE, &stream);

我有一个 CImage 对象,我将其保存到此流中:

image->Save(stream, Gdiplus::ImageFormatBMP);

我需要获取写入此IStream的字节数大小。

我该如何做到这一点?

IStream中没有Length或类似的属性...

谢谢!

3个回答

7

5

或者您可以使用:

    ULARGE_INTEGER liSize;
    IStream_Size(pStream, &liSize);

在这种情况下,您可能会发现其他有用的功能:

    IStream_Reset(pStream);         // reset seek position to beginning
    IStream_Read(pStream, mem, size);

-1

可以使用IStream_SizeIStream::Stat来请求大小。 IStream_Size似乎是IStream::Stat的便捷包装器(奇怪的是,它只作为C COM宏可用)。 如果确实是这种情况,则查询了大量数据:整个STATSTG,可选地不包括pwcsName成员。

在这种情况下,获取相同信息的一种更少成本的方法是IStream::Seek

HRESULT get_size(IStream* stream, ULARGE_INTEGER& size) {
    return IStream->Seek({}, STREAM_SEEK_END, &size);
}

这会更改流的当前读取或写入指针。如果您需要保存当前位置,可以使用以下方法:

ULARGE_INTEGER current{};
stream->Seek({}, STREAM_SEEK_CUR, &current);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接