CArchive オブジェクトを作成する 2 つの方法
CArchive
オブジェクトを作成するには、次の 2 つの方法があります。
フレームワークを介した CArchive オブジェクトの暗黙的な作成
最も一般的で最も簡単な方法は、[ファイル] メニューの [保存]、 [名前を付けて保存]、および [開く] コマンドの代わりに、フレームワークでドキュメントの CArchive
オブジェクトを作成することです。
アプリケーションのユーザーが [ファイル] メニューから [名前を付けて保存] コマンドを発行した場合のフレームワークの動作を次に示します。
[名前を付 けて保存] ダイアログ ボックスを表示し、ユーザーからファイル名を取得します。
CFile
オブジェクトとしてユーザーにより名付けられたファイルを開きます。この
CFile
オブジェクトをポイントするCArchive
オブジェクトを作成します。CArchive
オブジェクトを作成する際に、フレームワークは"読み込み" (読み取り、逆シリアル化) ではなく、モードを "ストア" (書き込み、シリアル化) に設定します。CDocument
派生クラスで定義されているSerialize
関数を呼び出し、CArchive
オブジェクトへの参照を渡します。
その後、ドキュメントの Serialize
関数は、簡単に説明したように CArchive
オブジェクトにデータを書き込みます。 Serialize
関数から戻った後、フレームワークは CArchive
オブジェクトを破棄してから CFile
オブジェクトを破棄します。
したがって、フレームワークでドキュメントの CArchive
オブジェクトを作成する場合は、アーカイブとの間で書き込みと読み取りを行うドキュメントの Serialize
関数を実装する必要があります。 また、ドキュメントの Serialize
関数が直接または間接的にシリアル化するCObject
派生オブジェクトに対して Serialize
を実装する必要があります。
CArchive オブジェクトの明示的な作成
フレームワークを介してドキュメントをシリアル化する以外に CArchive
オブジェクトが必要な場合があります。 たとえば、CSharedFile
オブジェクトによって表されるクリップボード間でデータをシリアル化することができます。 または、ユーザー インターフェイスを使用して、フレームワークによって提供されるファイルとは異なるファイルを保存することもできます。 この場合は CArchive
オブジェクトを明示的に作成できます。 これは、次の手順を使用して、フレームワークの場合と同じように行います。
CArchive オブジェクトを明示的に作成するには
CFile
オブジェクトまたはCFile
から派生したオブジェクトを構築します。次の例に示すように、
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 オブジェクトを閉じるには
次の例は、
CArchive
オブジェクトを閉じる方法を示しています:archive.Close(); theFile.Close();