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