Partager via


À 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;

Voir aussi

Concepts

Sérialisation : sérialiser un objet