Verwenden des CArchive << und >> der Operatoren

CArchive stellt << und >> Operatoren zum Schreiben und Lesen von einfachen Datentypen sowie CObject s in bzw. aus einer Datei.

So fügen Sie ein Objekt in einer Datei zu einem Archiv speichern

  • Im folgenden Beispiel wird veranschaulicht, wie ein Objekt in einer Datei zu einem Archiv gespeichert werden:

    CArchive ar(&theFile, CArchive::store);
    WORD wEmployeeID = 78;
    ar << wEmployeeID;
    

So fügen Sie ein Objekt aus einem Wert in einer Datei gespeichert, die zuvor laden

  • Im folgenden Beispiel wird veranschaulicht, wie ein Objekt von einem Wert lädt, der zuvor in einer Datei gespeichert wird:

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

Normalerweise speichern und laden Sie Daten in eine und aus einer Datei zu einem Archiv in den Serialize-Funktionen von CObject abgeleitete Klassen, die Sie mit dem DECLARE_SERIALIZE Makro deklariert haben müssen.Ein Verweis auf ein CArchive-Objekt wird an die Serialize-Funktion übergeben.Sie rufen die IsLoading-Funktion des CArchive-Objekts auf, um zu bestimmen, ob die Serialize-Funktion aufgerufen wurde, um Daten aus den Datei- oder Speichern von Daten in die Datei zu laden.

Die Serialize-Funktion von serialisierbaren CObject abgeleitete Klasse verfügt i. d. R. das folgende Format:

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
   }
}

Die obige Code genau die gleiche Vorlage handelt, der ein Anwendungs-Assistent für die Serialize-Funktion des Dokuments erstellt eine Klasse (abgeleitet von CDocument).Diese Vorlage hilft Ihnen, Code zu schreiben, der Code einfacher, da der speichernde Code und der Code immer parallel geladen werden sollten, wie im folgenden Beispiel zu überprüfen:

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

Die Bibliothek definiert << und >>-Operatoren für CArchive als der erste Operand und die folgenden Datentypen und Klassentypen als der zweite Operand:

CObject*

SIZE und CSize

float

WORD

CString

POINT und CPoint

DWORD

BYTE

RECT und CRect

Double

LONG

CTime und CTimeSpan

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

HinweisHinweis

Zum Speichern und Laden von CObject s über ein Archiv erfordert weitere Überlegung.Weitere Informationen finden Sie unter CObjects über ein Archiv Laden und Speichern.

Die CArchive << und >>-Operatoren geben immer einen Verweis auf das CArchive-Objekt zurück, das der erste Operand ist.Dies ermöglicht es Ihnen, die Operatoren zu verketten, wie im Folgenden gezeigt:

archive << m_strName << m_wAge;

Siehe auch

Konzepte

Serialisierung: Serialisieren eines Objekts