IStream::CopyTo 方法 (objidl.h)

CopyTo 方法将指定数量的字节从流中的当前搜寻指针复制到另一个流中的当前查找指针。

语法

HRESULT CopyTo(
  [in]  IStream        *pstm,
  [in]  ULARGE_INTEGER cb,
  [out] ULARGE_INTEGER *pcbRead,
  [out] ULARGE_INTEGER *pcbWritten
);

参数

[in] pstm

指向目标流的指针。 pstm 指向的流可以是新流或源流的克隆。

[in] cb

要从源流复制的字节数。

[out] pcbRead

指向此方法写入从源读取的实际字节数的位置的指针。 可以将此指针设置为 NULL。 在这种情况下,此方法不提供实际读取的字节数。

[out] pcbWritten

指向此方法写入要写入到目标的实际字节数的位置的指针。 可以将此指针设置为 NULL。 在这种情况下,此方法不提供实际写入的字节数。

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK 已成功复制流对象。
E_PENDING 仅异步存储:要复制的部分或全部数据当前不可用。
STG_E_INVALIDPOINTER 其中一个指针参数的值无效。
STG_E_MEDIUMFULL 不会复制流,因为存储设备上没有剩余空间。
STG_E_REVERTED 对象在事务树中的上方还原操作已失效。

注解

CopyTo 方法将指定的字节从一个流复制到另一个流。 它还可用于将流复制到自身。 每个流实例中的搜寻指针都会根据读取或写入的字节数进行调整。 此方法等效于使用 ISequentialStream::Readcb 字节读取到内存中,然后使用 ISequentialStream::Write 立即将它们写入目标流,尽管 IStream::CopyTo 会更高效。

目标流可以是通过调用 IStream::Clone 方法创建的源流的克隆。

如果 IStream::CopyTo 返回错误,则不能假定搜寻指针对源或目标有效。 此外, 即使返回了,但“印刷量”“印刷板” 的值也无意义。

如果 IStream::CopyTo 成功返回,则实际读取和写入的字节数相同。

若要从当前搜寻指针复制源的其余部分,请指定 cb 参数的最大大整数值。 如果 seek 指针是流的开头,则此操作将复制整个流。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objidl.h
Library Uuid.lib
DLL Ole32.dll

另请参阅

ISequentialStream::Read

ISequentialStream::Write

IStream - 复合文件实现

IStream::Clone