CArchive オブジェクトを作成する 2 つの方法

CArchive オブジェクトを作成するには、次の 2 つの方法があります。

フレームワークを介した CArchive オブジェクトの暗黙的な作成

最も一般的で最も簡単な方法は、[ファイル] メニューの [保存]、 [名前を付けて保存]、および [開く] コマンドの代わりに、フレームワークでドキュメントの CArchive オブジェクトを作成することです。

アプリケーションのユーザーが [ファイル] メニューから [名前を付けて保存] コマンドを発行した場合のフレームワークの動作を次に示します。

  1. [名前を付 けて保存] ダイアログ ボックスを表示し、ユーザーからファイル名を取得します。

  2. CFile オブジェクトとしてユーザーにより名付けられたファイルを開きます。

  3. この CFile オブジェクトをポイントする CArchive オブジェクトを作成します。 CArchive オブジェクトを作成する際に、フレームワークは"読み込み" (読み取り、逆シリアル化) ではなく、モードを "ストア" (書き込み、シリアル化) に設定します。

  4. CDocument 派生クラスで定義されている Serialize 関数を呼び出し、CArchive オブジェクトへの参照を渡します。

その後、ドキュメントの Serialize 関数は、簡単に説明したように CArchive オブジェクトにデータを書き込みます。 Serialize 関数から戻った後、フレームワークは CArchive オブジェクトを破棄してから CFile オブジェクトを破棄します。

したがって、フレームワークでドキュメントの CArchive オブジェクトを作成する場合は、アーカイブとの間で書き込みと読み取りを行うドキュメントの Serialize 関数を実装する必要があります。 また、ドキュメントの Serialize 関数が直接または間接的にシリアル化するCObject 派生オブジェクトに対して Serialize を実装する必要があります。

CArchive オブジェクトの明示的な作成

フレームワークを介してドキュメントをシリアル化する以外に CArchive オブジェクトが必要な場合があります。 たとえば、CSharedFile オブジェクトによって表されるクリップボード間でデータをシリアル化することができます。 または、ユーザー インターフェイスを使用して、フレームワークによって提供されるファイルとは異なるファイルを保存することもできます。 この場合は CArchive オブジェクトを明示的に作成できます。 これは、次の手順を使用して、フレームワークの場合と同じように行います。

CArchive オブジェクトを明示的に作成するには

  1. CFile オブジェクトまたは CFile から派生したオブジェクトを構築します。

  2. 次の例に示すように、CArchive のコンストラクターに CFile オブジェクトを渡します:

    CFile theFile;
    theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite);
    CArchive archive(&theFile, CArchive::store);
    

    CArchive コンストラクターの 2 番目の引数は、ファイルとの間でデータを格納または読み込む際にアーカイブを使用するかどうかを指定する列挙値です。 オブジェクトの Serialize 関数は、アーカイブ オブジェクトの IsStoring 関数を呼び出すことによって、この状態をチェックします。

CArchive オブジェクトへのデータの格納またはオブジェクトからのデータの読み込みが完了したら、閉じます。 アーカイブ (および ファイル) はCArchive (および CFile) オブジェクトにより自動的に閉じられますが、エラーからの復旧が簡単なので、明示的に閉じるのが良い方法です。 エラー処理の詳細については、「例外処理: 例外のキャッチと削除」の記事を参照してください。

CArchive オブジェクトを閉じるには

  1. 次の例は、CArchive オブジェクトを閉じる方法を示しています:

    archive.Close();
    theFile.Close();
    

関連項目

シリアル化: オブジェクトのシリアル化