Serialization in Non-Document/View Architecture projects

Introduction

Serialize data to the disk and retrieve it again :-

Implementation

Step 1

	Create a normal project as you usually do in Visual C++.

Step 2

	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. 

	 NOTE 1 : Be sure to derive that class from CObject. Only then you can serialize the data.
	 NOTE 2 : Be sure to use the DECLARE_SERIAL macro inside.

	 Example :-  ( CInfo.h )
	 ------------------------

	 class CInfo : public CObject
	 {
 	  DECLARE_SERIAL(CInfo)

 	  public:
	
		virtual void Serialize(CArchive& ar);
		int	m_nIndex;
		CString m_strName;
	 };

Step 3

	 Add the serialization function in this class's .cpp file. 

	 NOTE 1 : Be sure to use the IMPLEMENT_SERIAL macro as shown.

	 Example :-  ( CInfo.cpp )
	 ------------------------

	 #include "stdafx.h"
	 #include "CInfo.h"

	 IMPLEMENT_SERIAL(CInfo,CObject,1)

	 void CInfo::Serialize(CArchive& ar)
	 {
	   if (ar.IsLoading())		// If you are loading data from the disk
	   {
	     ar >> m_strName;
	     ar >> m_nIndex;
	   }
	   else				// If you are storing data to the disk
	   {
	     ar << m_strName;
	     ar << m_nIndex;
	   }
	 }

Step 4

 	 As this example is concerned with just 2 variables, assume that 2 edit controls have been created
	 to accomodate 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") // The Accounts.dat file is the file that we are going to use 
 					      // to save and read data

Step 5

	Now , we write the code for storing the data to the disk.
	
	NOTE 1 :  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()					//  Code to serialize and save the data
	{
	 UINT nFlags = CFile::typeBinary | CFile::modeWrite;

	 if (_access(DATA_FILE, 0))
	 {
		nFlags |= CFile::modeCreate;			// The file doesn't exist, so create it
		m_bCanSave = TRUE;
	 }
	 else
	 {
		int nTemp = _access(DATA_FILE, 6);		// Check Read Write Permissions
		if(nTemp==0)
			m_bCanSave = TRUE;
	 }

	 if (m_bCanSave)
	 {
	  CFile file;
	  CFileException fe;

	  // The file exists with read & write permissions
	  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);				// Serialize the data
	  }
	 }		
	}

Step 6

	Now , we write the code for reading the data from the disk.

	void LoadRecords()
	{
	 if (_access(DATA_FILE, 6)==0)		// If File Exists
	 {
	  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

THATS IT. A Simple tutorial for serialization is complete. You have a program that can serialize
data to the disk and retrieve it later. You didnt know that serialization was so easy. Did you ? 
All Luck.
Hosted by www.Geocities.ws

tutorials /
serialization
home /
Hosted by www.Geocities.ws

1