IStream インターフェイス (objidl.h)

IStream インターフェイスを使用すると、ストリーム オブジェクトに対するデータの読み取りと書き込みを行うことができます。 Stream オブジェクトには、構造化ストレージ オブジェクト内のデータが格納されます。ここで、ストレージは構造体を提供します。 単純なデータはストリームに直接書き込むことができますが、ほとんどの場合、ストリームはストレージ オブジェクト内に入れ子になった要素です。 これらは標準ファイルに似ています。

IStream インターフェイスは、MS-DOS FAT ファイル関数と同様のメソッドを定義します。 たとえば、各ストリーム オブジェクトには、独自のアクセス権とシーク ポインターがあります。 DOS ファイルとストリーム オブジェクトのメイン違いは、後者の場合、ストリームはファイル ハンドルではなく IStream インターフェイス ポインターを使用して開かれる点です。

このインターフェイスのメソッドは、オブジェクトのデータを、読み取りまたは書き込み可能な連続したバイト シーケンスとして表示します。 また、トランザクション モードで開いているストリームの変更をコミットおよび元に戻すメソッドや、ストリーム内のバイト範囲へのアクセスを制限するメソッドもあります。

ストリームは、ファイル システム リソースを消費することなく、長期間開いたままにすることができます。 IUnknown::Release メソッドは、ファイルの close 関数に似ています。 解放されると、ストリーム オブジェクトは無効になり、使用できなくなります。

非同期モニカーのクライアントは、非同期 IMoniker::BindToStorage 操作を実行したり、非同期通知を受信したりするために、データ プル モデルとデータ プッシュ モデルのどちらかを選択できます。 詳細については、「 URL モニカー 」を参照してください。 次の表は、これら 2 つのダウンロード モデルで IBindStatusCallback::OnDataAvailable で返される非同期 ISequentialStream::Read 呼び出しと IStream::Seek 呼び出しの動作を比較したものです。

IStream メソッドの呼び出し データ プル モデルでの動作 データ プッシュ モデルでの動作
読み取り は、部分的なデータを読み取るために呼び出されます (つまり、使用可能なすべてのデータではありません) S_OK を返します。 クライアントは、 IBindStatusCallback::OnDataAvailable から戻る前に、使用可能なすべてのデータを引き続き読み取る必要があります。そうしないと、バインド操作がブロックされます。 (つまり、S_FALSEまたはE_PENDINGが返されるまで読み取ります) S_OK を返します。 この時点でクライアントが IBindStatusCallback::OnDataAvailable から戻った場合でも、バインド操作は続行され、バインドが終了するまで IBindStatusCallback::OnDataAvailable が繰り返し呼び出されます。
読み取り は、使用可能なすべてのデータを読み取るために呼び出されます バインド操作が完了していない場合はE_PENDINGを返し、使用可能なデータが増えると IBindStatusCallback::OnDataAvailable が再度呼び出されます。 データ プル モデルと同じです。
使用可能なすべてのデータを読み取るために読み取りが呼び出され、バインド操作が終了しました (ファイルの終わり) S_FALSEを返します。 その後、grfBSC フラグを BSCF_LASTDATANOTIFICATION に設定して、IBindStatusCallback::OnDataAvailable を呼び出します。 データ プル モデルと同じです。
Seek が呼び出される シーク はデータ プル モデルでは機能しません Seek はデータ プッシュ モデルでは機能しません。
 

このトピックの一般的な情報については、詳細については、 非同期モニカーデータ プル モデルとデータ プッシュ モデル に関するページを参照してください。 また、メモリを管理するための COM の規則の詳細については、「 メモリ割り当ての 管理」を参照してください。

継承

IStream インターフェイスは、ISequentialStream インターフェイスから継承されます。 IStream には、次の種類のメンバーもあります。

メソッド

IStream インターフェイスには、これらのメソッドがあります。

 
IStream::Clone

Clone メソッドは、元のストリームと同じバイトを参照する独自のシーク ポインターを持つ新しいストリーム オブジェクトを作成します。
IStream::Commit

Commit メソッドを使用すると、トランザクション モードで開いているストリーム オブジェクトに加えられた変更が親ストレージに反映されます。
IStream::CopyTo

ストリームの現在のシーク ポインターから別のストリームの現在のシーク ポインターに、指定したバイト数をコピーします。
IStream::LockRegion

LockRegion メソッドは、ストリーム内の指定されたバイト範囲へのアクセスを制限します。
IStream::Revert

Revert メソッドは、最後の IStream::Commit 呼び出し以降にトランザクション ストリームに加えられたすべての変更を破棄します。 ダイレクト モードで開いているストリームと、IStream::Revert の COM 複合ファイル実装を使用するストリームでは、このメソッドは効果がありません。
IStream::Seek

シーク ポインターを新しい場所に変更します。 新しい場所は、ストリームの先頭、ストリームの末尾、または現在のシーク ポインターに対する相対位置です。
IStream::SetSize

ストリーム オブジェクトのサイズを変更します。
IStream::Stat

Stat メソッドは、このストリームの STATSTG 構造体を取得します。
IStream::UnlockRegion

UnlockRegion メソッドは、以前に IStream::LockRegion で制限されていたバイト範囲に対するアクセス制限を削除します。

要件

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

こちらもご覧ください

ISequentialStream

IStream - 複合ファイルの実装