Introduction
This article will show you how you can serialize data to disk and retrieve it
again in non doc/view architecture projects. Just follow the steps outlined.
Steps to follow
- Create a normal project as you usually do.
- Add the class which you would use to serialize the data. It might contain
just normal variables or collection classes or any kind of data that you want
to store.
- Be sure to derive that class from
CObject
. Only then you can serialize
the data. - Be sure to use the
DECLARE_SERIAL
macro inside.
class CInfo : public CObject
{
DECLARE_SERIAL(CInfo)
public:
virtual void Serialize(CArchive& ar);
int m_nIndex;
CString m_strName;
};
Add the serialization function in this class's .cpp file. Be sure to use the
IMPLEMENT_SERIAL
macro as shown.
#include "stdafx.h"
#include "CInfo.h"
IMPLEMENT_SERIAL(CInfo,CObject,1)
void CInfo::Serialize(CArchive& ar)
{
if (ar.IsLoading())
{
ar >> m_strName;
ar >> m_nIndex;
}
else
{
ar << m_strName;
ar << m_nIndex;
}
}
As this example is concerned with just 2 variables, assume that 2
edit controls have been created to accommodate the Index and the Name. Add 2
variables to those edit controls using the Class Wizard. Now the File to which
the data has to be written or read from has to be defined. I do that simply by
:-
#define DATA_FILE _T("Accounts.dat")
Now, we write the code for storing the data to the disk. Here,
m_bCanSave
is declared in the header file as BOOL m_bCanSave;
and in the constructor it has been initialized as m_bCanSave = FALSE;
void SaveRecords()
{
UINT nFlags = CFile::typeBinary | CFile::modeWrite;
if (_access(DATA_FILE, 0))
{
nFlags |= CFile::modeCreate;
m_bCanSave = TRUE;
}
else
{
int nTemp = _access(DATA_FILE, 6);
if(nTemp==0)
m_bCanSave = TRUE;
}
if (m_bCanSave)
{
CFile file;
CFileException fe;
if (file.Open(DATA_FILE, nFlags, &fe))
{
CArchive ar(&file, CArchive::store);
UpdateData(TRUE);
Info.m_nIndex = m_nIndex;
Info.m_strName = m_strName;
Info.Serialize(ar);
}
}
}
Now , we write the code for reading the data from the disk.
void LoadRecords()
{
if (_access(DATA_FILE, 6)==0)
{
CFile file;
CFileException fe;
if (file.Open(DATA_FILE,CFile::typeBinary |
CFile::modeRead, &fe))
{
CArchive ar(&file, CArchive::load);
Info.Serialize(ar);
}
}
m_nIndex = Info.m_nIndex;
m_strName = Info.m_strName;
UpdateData(FALSE);
}
Conclusion
That's it. A Simple tutorial for serialization is complete. You have a
program that can serialize data to the disk and retrieve it later. You didn't
know that serialization was so easy. Did you? All Luck and have a nice time.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.