次の方法で共有


データのファイルへのシリアル化

永続化の基本的な考え方として、オブジェクトがそのメンバー変数の値によって示されるその現在の状態を永続ストレージに書き込むことができる必要があります。 その後、オブジェクトは、永続ストレージからそのオブジェクトの状態を読み取る、つまり "逆シリアル化する" ことで再生成できます。 ここで重要な点は、オブジェクト自体がそれ自体の状態の読み取りと書き込みを行うことです。 したがって、クラスを永続化するには、それに基本的なシリアル化操作を実装する必要があります。

フレームワークにより、[ファイル] メニューの [保存] と [名前を付けて保存] コマンドに応答してディスク ファイルにドキュメントを保存するため、および [開く] コマンドに応答してディスク ファイルからドキュメントを読み込むための既定の実装が提供されます。 ごくわずかな作業で、ファイルとの間でデータの書き込みと読み取りを行うドキュメントの機能を実装できます。 行う必要がある主なことは、ドキュメント クラスの Serialize メンバー関数のオーバーライドです。

MFC アプリケーション ウィザードにより、自動的に作成されたドキュメント クラス内に CDocument メンバー関数 Serialize のスケルトン オーバーライドが配置されます。 アプリケーションのメンバー変数を実装したら、Serialize オーバーライドに、ファイルに接続されている "アーカイブ オブジェクト" にデータを送信するコードを入力できます。 CArchive オブジェクトは、C++ iostream ライブラリの cin および cout 入出力オブジェクトに似ています。 ただし、CArchive は、書式設定されたテキストではなく、バイナリ形式の書き込みと読み取りを行います。

さらに詳しい情報

シリアル化におけるドキュメントの役割

フレームワークは、ドキュメントの Serialize メンバー関数を呼び出すことによって、[ファイル] メニューの [開く]、[保存]、[名前を付けて保存] の各コマンドに自動的に応答します (実装されている場合)。 たとえば、ID_FILE_OPEN コマンドは、アプリケーション オブジェクト内のハンドラー関数を呼び出します。 この処理中に、[ファイルを開く] ダイアログ ボックスが表示され、ユーザーが応答すると、ユーザーが選択したファイル名をフレームワークが取得します。 フレームワークは、ドキュメントにデータを読み込むために設定された CArchive オブジェクトを作成し、アーカイブを Serialize に渡します。 フレームワークは既にファイルを開いています。 ドキュメントの Serialize メンバー関数内のコードがアーカイブを介してデータを読み取り、必要に応じてデータ オブジェクトを再構築します。 シリアル化の詳細については、シリアル化に関する記事を参照してください。

シリアル化におけるデータの役割

一般に、クラス型のデータは、それ自体をシリアル化できる必要があります。 つまり、オブジェクトをアーカイブに渡すときに、オブジェクトがそれ自体をアーカイブに書き込む方法と、アーカイブからそれ自体を読み取る方法を知っている必要があります。 MFC では、この方法でクラスをシリアル化可能にすることがサポートされています。 データ型を定義するクラスを設計し、その型のデータをシリアル化する場合は、シリアル化の設計を行います。

関連項目

ドキュメントの使い方