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 - 複合ファイルの実装