CArchive の << および >> 演算子の使用

CArchive には、シンプルなデータ型の書き込みと読み取りを行う << 演算子と >> 演算子、およびファイルに格納する、またはファイルから読み込む CObject が用意されています。

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

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

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

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

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

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

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

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

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
CTime および CTimeSpan
Double

DWORD
Float
Int
LONG

POINT および CPoint
RECT および CRect
SIZE および CSize
WORD

Note

アーカイブを使用した CObject の格納と読み込みには、別途考慮が必要です。 詳細については、「アーカイブを通じた CObjects の格納と読み込み」を参照してください。

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

archive << m_strName << m_wAge;

関連項目

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