Freigeben über


Verwenden der CArchive-Operatoren << und >>

CArchive stellt << und >>-Operatoren für das Schreiben und Lesen von einfachen Datentypen sowie CObjects in und aus einer Datei.

Um ein Objekt in einer Datei zu einem Archiv speichern

  • Das folgende Beispiel zeigt, wie ein Objekt in einer Datei zu einem Archiv speichert:

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

Um ein Objekt einem Wert laden zuvor gespeichert in einer Datei

  • Im folgenden Beispiel wird gezeigt, wie ein Objekt von einem Wert geladen, der zuvor in einer Datei gespeichert wird:

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

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

Die Serialize-Funktion von serialisierbaren CObject abgeleitete Klasse verfügt normalerweise folgende Form:

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 oben aufgeführten Codevorlage ist genau identisch, die der eines Anwendungs-Assistent für die Serialize-Funktion des Dokuments erstellt (eine Klasse abgeleitet von CDocument). Diese Codevorlage hilft Ihnen, Code zu schreiben, der leichter, da der speichernde Code und der Ladencode immer parallel sein sollten, wie im folgenden Beispiel zu überprüfen ist:

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 >> für Operatoren CArchive als erste Operand und die folgenden Datentypen und die Klassentypen als der zweite Operand:

CObject*

GRÖSSE und CSize

float

WORD

CString

PUNKT und CPoint

DWORD

BYTE

RECT und CRect

Double

LONG

CTime und CTimeSpan

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

Hinweis

Das Speichern und Laden von CObjects zu einem Archiv erfordert zusätzliche Überlegung.Weitere Informationen finden Sie unter CObjects zu einem Archiv Speichern und Laden.

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 unten dargestellt:

archive << m_strName << m_wAge;

Siehe auch

Konzepte

Serialisierung: Serialisieren eines Objekts