次の方法で共有


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

Microsoft Foundation Classes (MFC) ライブラリは引き続きサポートされています。 ただし、機能の追加やドキュメントの更新は行われません。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ファイルへの段階的アクセス

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

ファイル アクセス モード

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

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

  • 直接モードでは、後で元に戻す機能を使用せずに、ドキュメントに加えられた変更が組み込まれます。

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

標準化

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

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

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

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

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

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

OLE プログラマ リファレンスの「IStreamIStorageILockBytes」を参照してください。

こちらも参照ください

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