Partager via


Utilisation des opérateurs CArchive << et >>

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

  1. 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

  1. 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;

Voir aussi

Sérialisation : sérialisation d’un objet