Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisation des opérateurs CArchive
CArchive fournit des opérateurs << et >> pour l'écriture et la lecture de types de données simples, ainsi que des CObject vers et depuis un fichier.
Pour stocker un objet dans un fichier via une archive
L’exemple suivant montre comment stocker un objet dans un fichier via une archive :
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Pour charger un objet à partir d’une valeur précédemment stockée dans un fichier
L’exemple suivant montre comment charger un objet à partir d’une valeur précédemment stockée dans un fichier :
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
En règle générale, vous stockez et chargez des données vers et à partir d’un fichier via une archive dans les Serialize fonctions des CObjectclasses dérivées, que vous devez avoir déclarées avec la macro DECLARE_SERIALIZE. Une référence à un CArchive objet est passée à votre Serialize fonction. Vous appelez la IsLoading fonction de l’objet CArchive pour déterminer si la Serialize fonction a été appelée pour charger des données à partir du fichier ou stocker des données dans le fichier.
La Serialize fonction d’une classe dérivée sérialisable CObjecta 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 le même que celui créé par AppWizard pour la Serialize fonction du document (une classe dérivée de CDocument). Ce modèle de code vous aide à écrire du code plus facile à examiner, car le code de stockage 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 les opérateurs << et >> pour CArchive en tant que premier opérande, et les types de données et de classes suivants comme deuxième opérande :
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime et CTimeSpan
Double
DWORD
Float
Int
LONG
POINT et CPoint
RECT et CRect
SIZE et CSize
WORD
Remarque
Le stockage et le chargement de CObject via une archive nécessite une attention particulière. Pour plus d’informations, consultez Stockage et chargement de CObjects via une archive.
Les opérateurs CArchive, << et >> retournent toujours une référence à l'objet CArchive, lequel est le premier opérande. Cela vous permet de chaîner les opérateurs, comme illustré ci-dessous :
archive << m_strName << m_wAge;