コンテナー : 複合ファイル

この記事では、複合ファイルのコンポーネントと実装、および OLE アプリケーションで複合ファイルを使用する利点と欠点について説明します。

複合ファイルは OLE の不可欠な部分です。 これらは、データ転送と OLE ドキュメント ストレージを容易にするために使用されます。 複合ファイルは、アクティブ構造化ストレージ モデルの実装です。 ストレージ、ストリーム、またはファイル オブジェクトへのシリアル化をサポートする一貫性のあるインターフェイスが存在します。 複合ファイルは、 クラスと Microsoft Foundation Class ライブラリでサポート COleStreamFile されています COleDocument

Note

複合ファイルを使用しても、情報が OLE ドキュメントまたは複合ドキュメントから取得されるという結果ではありません。 複合ファイルは、複合ドキュメント、OLE ドキュメント、その他のデータを格納する方法の 1 つです。

複合ファイルのコンポーネント

複合ファイルの OLE 実装では、ストリーム オブジェクト、ストレージ オブジェクト、オブジェクトの 3 種類のオブジェクトが使用 ILockBytes されます。 これらのオブジェクトは、次の方法で標準ファイル システムのコンポーネントに似ています。

  • ファイルのようなストリーム オブジェクトは、任意の型のデータを格納します。

  • Storageなどのオブジェクトには、他のストレージ オブジェクトとストリーム オブジェクトを含めできます。

  • LockBytes オブジェクトは、ストレージ オブジェクトと物理ハードウェアの間のインターフェイスを表します。 オブジェクトがアクセスしているストレージ デバイス (ハード ドライブやグローバル メモリの領域など) に実際のバイトがどのように書き込まれる LockBytes かを決定します。 オブジェクトと インターフェイスの LockBytes 詳細については ILockBytes 、「OLE プログラマー リファレンス LockBytes

複合ファイルの長所と短所

複合ファイルには、ファイル ストレージの以前の方法では利用できない利点があります。 これには次のようなものがあります。

  • ファイルへの増分アクセス。

  • ファイル アクセス モード。

  • ファイル構造の標準化。

アプリケーションで使用するかどうかを決定する際には、フロッピー ディスク上のストレージに関連する大きなサイズの複合ファイルの潜在的な欠点とパフォーマンスの問題を —— 考慮する必要があります。

ファイルへの増分アクセス

ファイルへの増分アクセスは、複合ファイルを使用する自動利点です。 複合ファイルは "ファイル内のファイル システム" と見なす可能性があります。そのため、ストリームやストレージなどの個々のオブジェクトの種類には、ファイル全体を読み込む必要なくアクセスできます。 これにより、アプリケーションがユーザーによる編集のために新しいオブジェクトにアクセスする必要がある時間が大幅に短縮される可能性があります。 増分更新は、同じ概念に基づいて、同様の利点を提供します。 OLE では、1 つのオブジェクトに加えた変更を保存するためにファイル全体を保存するのではなく、ユーザーが編集したストリームオブジェクトまたはストレージ オブジェクトのみを保存します。

ファイル アクセス モード

複合ファイル内のオブジェクトに対する変更がいつディスクにコミットされるのか判断できるのも、複合ファイルを使用するもう 1 つの利点です。 ファイルにアクセスするモード (トランザクションまたは直接) によって、変更がコミットされる時間が決わります。

  • トランザクション モードでは、2 フェーズ コミット操作を使用して複合ファイル内のオブジェクトに変更を加えます。これにより、ユーザーが変更の保存または元に戻す操作を選択するまで、ドキュメントの古いコピーと新しいコピーの両方を使用できます。

  • 直接モードでは、後で元に戻す機能を使用せずに、ドキュメントの変更を行った場合にドキュメントに対する変更が組み込されます。

アクセス モードの詳細については 、「OLE プログラマー リファレンス」を参照してください

標準化

複合ファイルの標準化された構造により、さまざまな OLE アプリケーションは、ファイルを実際に作成したアプリケーションの知識を持つ必要がない、OLE アプリケーションによって作成された複合ファイルを参照できます。

サイズとパフォーマンスに関する考慮事項

複合ファイルストレージ構造の複雑さ、およびデータを増分的に保存する機能により、この形式を使用するファイルは、非構造化または "フラット ファイル" ストレージを使用する他のファイルよりも大きくなる傾向があります。 アプリケーションが頻繁にファイルを読み込み、保存する場合、複合ファイルを使用すると、非コンパイル ファイルよりもはるかに迅速にファイル サイズが増加する可能性があります。 複合ファイルは大きくなる可能性があります。このため、フロッピー ディスクに格納および読み込まれたファイルのアクセス時間も影響を受け、ファイルへのアクセスが遅くなる可能性があります。

パフォーマンスに影響するもう 1 つの問題は、複合ファイルの断片化です。 複合ファイルのサイズは、ファイルで使用される最初のディスク セクターと最後のディスク セクターの差によって決まります。 断片化されたファイルには、データが含まれるのではなく、サイズを計算するときにカウントされる空き領域の領域が多数含まれる場合があります。 複合ファイルの有効期間中に、これらの領域はストレージ オブジェクトの挿入または削除によって作成されます。

データに複合ファイル形式を使用する

から派生したドキュメント クラスを持つアプリケーションが正常に作成された後、メイン ドキュメント コンストラクターが を呼び COleDocument 出す必要があります EnableCompoundFile 。 アプリケーション ウィザードで OLE コンテナー アプリケーションを作成すると、この呼び出しが自動的に挿入されます。

OLE プログラマーズ リファレンスの「IStream、IStorage、およびILockBytes 」を参照してください

関連項目

Containers
コンテナー: User-Interface問題
COleStreamFile クラス
COleDocument クラス