シリアル化機構のバイパス
ここまで記載されているように、フレームワークには、ファイル間でデータを読み書きするための既定の方法が提供されています。 アーカイブ オブジェクトを使用したシリアル化は、多数のアプリケーションのニーズに適しています。 このようなアプリケーションは、ファイルを完全にメモリに読み込み、ユーザーがファイルを更新してから、更新されたバージョンをディスクに再度書き込みます。
ただし、一部のアプリケーションではデータの操作方法が大きく異なります。これらのアプリケーションでは、アーカイブを介したシリアル化は適しません。 たとえば、データベース プログラム、大きなファイルの一部のみを編集するプログラム、テキスト専用ファイルを書き込むプログラム、データ ファイルを共有するプログラムなどです。
このような場合は、Serialize 関数をオーバーライドして、CArchive オブジェクトではなく CFile オブジェクトを介してファイル アクションを仲裁できます。
クラス CFile
の Open
、Read
、Write
、Close
および Seek
のメンバー関数を使用してファイルを開き、ファイル ポインター (シーク) をファイル内の特定のポイントに移動し、その時点でレコード (指定したバイト数) を読み取り、ユーザーがレコードを更新してから、もう一度同じポイントをシークし、レコードをファイルに書き戻します。 フレームワークによってファイルが開き、クラス CArchive
の GetFile
メンバー関数を使用して CFile
オブジェクトへのポインターを取得できます。 さらに高度で柔軟な使用のために、クラス CWinApp
の OnOpenDocument および OnSaveDocument のメンバー関数をオーバーライドできます。 詳細については、「MFC リファレンス」のクラス CFile を参照してください。
このシナリオの Serialize
は、ドキュメントが閉じるときにファイル ヘッダーを最新の状態に保つためにファイル ヘッダーを読み書きする場合を指定しない限り、オーバーライドは何も行いません。