次の方法で共有


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

更新 : 2007 年 11 月

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

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

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

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

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

参照

参照

ドキュメントの使い方