次の方法で共有


CArchive << 演算子と >> 演算子の使用

CArchiveには、単純なデータ型の書き込みと読み取り、およびファイルとの間の<<のための>>演算子とCObject演算子が用意されています。

アーカイブを使用してファイルにオブジェクトを格納するには

  1. 次の例は、アーカイブを使用してファイルにオブジェクトを格納する方法を示しています。

    CArchive ar(&theFile, CArchive::store);
    WORD wEmployeeID = 78;
    ar << wEmployeeID;
    

以前にファイルに格納された値からオブジェクトを読み込むには

  1. 次の例は、以前にファイルに格納された値からオブジェクトを読み込む方法を示しています。

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

通常、Serialize 派生クラスのCObject関数のアーカイブを介してファイルとの間でデータを格納および読み込みます。DECLARE_SERIALIZE マクロで宣言する必要があります。 CArchive オブジェクトへの参照は、Serialize関数に渡されます。 IsLoading オブジェクトのCArchive関数を呼び出して、ファイルからデータを読み込むか、ファイルにデータを格納するためにSerialize関数が呼び出されたかを判断します。

シリアル化可能なSerialize派生クラスのCObject関数は、通常、次の形式になります。

void CSerializableObj::Serialize(CArchive &archive)
{
   // call base class function first
   // base class is CObject in this case
   CObject::Serialize(archive);

   // now do the stuff for our specific class
   if (archive.IsStoring())
   {
      // TODO:  add storing code here
   }
   else
   {
      // TODO:  add storing code here
   }
}

上記のコード テンプレートは、AppWizard がドキュメントの Serialize 関数 ( CDocument から派生したクラス) 用に作成したものとまったく同じです。 このコード テンプレートは、次の例のように、格納するコードと読み込みコードが常に並列である必要があるため、確認しやすいコードを記述するのに役立ちます。

void CEmployee::Serialize(CArchive &archive)
{
   // call base class function first
   // base class is CObject in this case
   CObject::Serialize(archive);

   // now do the stuff for our specific class
   if (archive.IsStoring())
      archive << m_strName << m_wAge;
   else
      archive >> m_strName >> m_wAge;
}

このライブラリは、<<>>演算子とCArchive演算子を最初のオペランドとして定義し、次のデータ型とクラス型を 2 番目のオペランドとして定義します。

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTimeCTimeSpan
Double

DWORD
Float
Int
LONG

POINTCPoint
RECTCRect
SIZECSize
WORD

アーカイブを使用して CObjectを格納および読み込むには、追加の考慮事項が必要です。 詳細については、「 アーカイブを使用した CObject の格納と読み込み」を参照してください。

CArchive <<演算子と>>演算子は常に、最初のオペランドであるCArchive オブジェクトへの参照を返します。 これにより、次に示すように、演算子を連結できます。

archive << m_strName << m_wAge;

こちらも参照ください

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