À l'aide de le CArchive << et des opérateurs d'>>
CArchive fournit les opérateurs << et >> pour lire et écrire les types de données simples ainsi que CObjects vers et à partir d'un fichier.
Pour inscrire un objet dans un fichier via une archive
L'exemple suivant indique comment stocker 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 précédemment enregistrée dans un fichier
Le code exemple suivant montre comment charger un objet d'une valeur précédemment enregistrée dans un fichier :
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Généralement, vous enregistrez et charger des données vers et à partir d'un fichier via une archive dans des fonctions Serialize de classes dérivées CObject-, vous devez être déclarées avec la macro de DECLARE_SERIALIZE. Une référence à un objet CArchive est transmise à la fonction Serialize. Vous appelez la fonction IsLoading de l'objet CArchive pour déterminer si la fonction Serialize a été appelée pour charger des données de fichier ou de magasin au fichier.
La fonction Serialize d'une classe dérivée CObjectsérialisable - la classe dérivée est généralement sous 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éation pour la fonction Serialize du document (une classe dérivés de CDocument). Ce modèle de code vous aide à écrire du code plus facile à vérifier, car le code 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 les types et classe de données suivantes en tant que second opérande :
CObject* |
SIZE et CSize |
float |
WORD |
CString |
POINT et CPoint |
DWORD |
BYTE |
RECT et CRect |
Double |
LONG |
CTime et CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
Notes
Le stockage et chargement de CObjects via une archive requiert une attention supplémentaire.Pour plus d'informations, consultez Stockage et de CObjects via une archive.
Les opérateurs de CArchive << et de >> retournent toujours une référence à l'objet CArchive, qui est le premier opérande. Cela vous permet de chaîner les opérateurs, comme illustré ci-après :
archive << m_strName << m_wAge;