次の方法で共有


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

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

  • フレームワークによる CArchive オブジェクトの暗黙的な作成

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

フレームワークによる CArchive オブジェクトの暗黙的な作成

最も一般的で簡単な方法は、[ファイル] メニューの各コマンド ([上書き保存]、[名前を付けて保存]、[開く]) をクリックしてドキュメントの 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 オブジェクトを明示的に作成できます。 フレームワークによる作成手順と同様に、以下の手順で作成します。

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 オブジェクトからのデータの読み込みが終わったら、このオブジェクトを閉じます。 CArchive オブジェクト (および CFile オブジェクト) は自動的にアーカイブ (およびファイル) を閉じますが、明示的に閉じることにより、エラーからの回復が簡単になります。 エラー処理の詳細についてを参照してください「の例外:キャッチし、例外を削除する

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

  • CArchive オブジェクトを閉じる例を次に示します。

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

参照

概念

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