次の方法で共有


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

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

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

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

アプリケーションのユーザーが [ファイル] メニューから [名前を付けて保存] コマンドを発行すると、フレームワークで実行される処理を次に示します。

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

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

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

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

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

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

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

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

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

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

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

    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();
    

こちらも参照ください

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