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