Share via


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 ポインター パラメーターの 1 つの値が無効です。
STG_E_MEDIUMFULL ストレージ デバイスに空き領域がないため、ストリームはコピーされません。
STG_E_REVERTED オブジェクトは、トランザクション ツリー内のオブジェクトの上にある元に戻す操作によって無効になっています。

注釈

CopyTo メソッドは、指定したバイトをあるストリームから別のストリームにコピーします。 ストリームをそれ自体にコピーするためにも使用できます。 各ストリーム インスタンスのシーク ポインターは、読み取りまたは書き込まれたバイト数に合わせて調整されます。 このメソッドは、ISequentialStream::Read を使用して cb バイトをメモリに読み込み、ISequentialStream::Write を使用してすぐに宛先ストリームに書き込むのと同じですが、IStream::CopyTo の方が効率的です。

宛先ストリームには、 IStream::Clone メソッドを呼び出して作成されたソース ストリームの複製を指定できます。

IStream::CopyTo がエラーを返した場合、シーク ポインターがソースまたは宛先に対して有効であるとは想定できません。 さらに、 pcbReadpcbWritten の値は、返されても意味がありません。

IStream::CopyTo が正常に返された場合、読み取りと書き込みの実際のバイト数は同じです。

現在のシーク ポインターからソースの残りの部分をコピーするには、 cb パラメーターの最大大きな整数値を指定します。 シーク ポインターがストリームの先頭である場合、この操作はストリーム全体をコピーします。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objidl.h
Library Uuid.lib
[DLL] Ole32.dll

こちらもご覧ください

ISequentialStream::Read

ISequentialStream::Write

IStream - 複合ファイルの実装

IStream::Clone