Partager via


Utilisation de CArchive << et >> d’opérateurs

CArchive fournit << et >> opérateurs pour l’écriture et la lecture de types de données simples, ainsi que CObjectvers et à partir d’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 << et >> les opérateurs pour CArchive le premier opérande et les types de données et les types 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 CObjectde s via une archive nécessitent une considération supplémentaire. Pour plus d’informations, consultez Stockage et chargement de CObjects via une archive.

Les CArchive<< opérateurs 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-dessous :

archive << m_strName << m_wAge;

Voir aussi

Sérialisation : sérialisation d’un objet