次の方法で共有


シリアル化機構のバイパス

ここまで説明してきたように、フレームワークでは、ファイルとの間でデータを読み書きする既定の方法が用意されています。 アーカイブ オブジェクトを経由したシリアル化は、ほとんどのアプリケーションの要求に適しています。 たとえば、ファイル全体をメモリに読み出し、ユーザーにファイルを更新させ、更新されたバージョンをディスクに書き戻すアプリケーションは、既定の方法で処理できます。

ただし、アプリケーションの中にはデータの処理方法がまったく異なるものもあり、そのようなアプリケーションでは、アーカイブ経由のシリアル化は適していません。 たとえば、データベース プログラム、大きなファイルの一部だけを編集するプログラム、テキストだけのファイルを保存するプログラム、データ ファイルを共有するプログラムなどには適しません。

以上のような場合には、Serialize 関数を別の方法でオーバーライドすると、CArchive オブジェクトではなく CFile オブジェクトを経由してファイルの動作を中継できます。

CFile クラスのメンバー関数、OpenReadWriteClose、および Seek を使うと、ファイルを開き、ファイル ポインターをファイル内の指定されたポイントに移動し、そのポイントからレコードを (指定されたバイト数だけ) 読み取り、ユーザーにレコードを更新させ、その後、再び同じポイントを検索して、更新されたレコードをファイルに書き戻すことができます。 フレームワークによって、ファイルが自動的に開かれるので、CArchive クラスの GetFile メンバー関数を使って CFile オブジェクトへのポインターを取得できます。 さらに高度で柔軟な使い方が必要な場合は、CWinApp クラスのメンバー関数である OnOpenDocumentOnSaveDocument をオーバーライドできます。 詳細については、『MFC リファレンス』で、CFile クラスに関するトピックを参照してください。

このシナリオでは、たとえば、ドキュメントを閉じたときにファイル ヘッダーを最新に保つように、Serialize のオーバーライド関数でファイル ヘッダーを読み書きしない限り、Serialize のオーバーライド関数は何も行いません。

参照

参照

ドキュメントの使い方