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

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

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