CArchive
CArchive には、シンプルなデータ型の書き込みと読み取りを行う << 演算子と >> 演算子、およびファイルに格納する、またはファイルから読み込む CObject が用意されています。
アーカイブを使用してファイルにオブジェクトを格納するには
次の例は、アーカイブを使用してファイルにオブジェクトを格納する方法を示しています。
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
以前にファイルに格納された値からオブジェクトを読み込むには
次の例は、以前にファイルに格納された値からオブジェクトを読み込む方法を示しています。
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
CTime と CTimeSpan
Double
DWORD
Float
Int
LONG
POINT と CPoint
RECT と CRect
SIZE と CSize
WORD
注
アーカイブを使用して CObjectを格納および読み込むには、追加の考慮事項が必要です。 詳細については、「 アーカイブを使用した CObject の格納と読み込み」を参照してください。
CArchive<<演算子と>>演算子は常に、最初のオペランドであるCArchive オブジェクトへの参照を返します。 これにより、次に示すように、演算子を連結できます。
archive << m_strName << m_wAge;