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 |