À l'aide de le CArchive << et >> des opérateurs
CArchive fournit des opérateurs de << et de >> pour écrire et lire les types de données simples ainsi qu' CObjects à partir d'un fichier.
Pour stocker un objet dans un fichier via une archive
L'exemple suivant montre comment inscrire un objet dans un fichier via une archive :
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Pour charger un objet d'une valeur enregistrée précédemment dans un fichier
L'exemple suivant montre comment charger un objet d'une valeur enregistrée précédemment dans un fichier :
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Généralement, vous enregistrez et chargez des données à partir d'un fichier via une archive dans les fonctions d' Serialize d' CObject- les classes dérivées, que vous devez avoir déclarées avec la macro de DECLARE_SERIALIZE .Une référence à un objet d' CArchive est passée à la fonction d' Serialize .Vous appelez la fonction d' IsLoading de l'objet d' CArchive pour déterminer si la fonction d' Serialize a été appelée pour charger des données des données de fichier ou de magasin au fichier.
La fonction d' Serialize d' CObjectsérialisable - une classe dérivée a généralement la forme suivante :
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
}
}
Le modèle de code ci-dessus est exactement identique à un AppWizard crée pour la fonction d' Serialize du document (une classe dérivée de CDocument).Vous aide de ce modèle de code vous écrivez du code qui est plus facile à examiner que, étant donné que le code de l'enregistrement et le code de chargement doivent toujours être parallèles, comme dans l'exemple suivant :
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;
}
La bibliothèque définit << et les opérateurs de >> pour CArchive comme premier opérande et types et classe de données suivants types comme deuxième :
CObject* |
TAILLE et CSize |
float |
WORD |
CString |
POINT et CPoint |
DWORD |
BYTE |
RECT et CRect |
Double |
LONG |
CTime et CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
[!REMARQUE]
L'enregistrement et le chargement CObjects via une archive requiert la considération supplémentaire.Pour plus d'informations, consultez L'enregistrement et le chargement CObjects via une archive.
Les opérateurs de CArchive << et de >> retournent toujours une référence à l'objet d' CArchive , qui est le premier opérande.Cela vous permet de chaîner les opérateurs, comme illustré ci-dessous :
archive << m_strName << m_wAge;