Freigeben über


Verwendung der CArchive << und >> Operatoren

CArchive bietet << und >> Operatoren zum Schreiben und Lesen einfacher Datentypen sowie CObjects in und aus einer Datei.

So speichern Sie ein Objekt in einer Datei über ein Archiv

  1. Das folgende Beispiel zeigt, wie ein Objekt in einer Datei über ein Archiv gespeichert wird:

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

So laden Sie ein Objekt aus einem Zuvor in einer Datei gespeicherten Wert

  1. Das folgende Beispiel zeigt, wie ein Objekt aus einem Zuvor in einer Datei gespeicherten Wert geladen wird:

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

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

Die Serialize Funktion einer serialisierbaren CObjectabgeleiteten Klasse weist in der Regel die folgende Form auf:

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 genannte Codevorlage ist genau identisch mit der Vorlage, die der AppWizard für die Funktion Serialize des Dokuments (eine von CDocument abgeleitete Klasse) erstellt. Diese Codevorlage hilft Ihnen beim Schreiben von Code, der einfacher zu überprüfen ist, da der Speichercode und der Ladecode immer parallel sein sollten, wie im folgenden Beispiel gezeigt:

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 ersten Operanden und die folgenden Daten- und Klassentypen als zweiten Operanden:

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTime und CTimeSpan
Double

DWORD
Float
Int
LONG

POINT und CPoint
RECT und CRect
SIZE und CSize
WORD

Hinweis

Das Speichern und Laden von CObject über ein Archiv erfordert zusätzliche Überlegungen. Weitere Informationen finden Sie unter Speichern und Laden von CObjects über ein Archiv.

Die CArchive<< und >> Operatoren geben immer einen Verweis auf das CArchive-Objekt zurück, das der erste Operand ist. Auf diese Weise können Sie die Operatoren verketten, wie unten dargestellt:

archive << m_strName << m_wAge;

Siehe auch

Serialisierung: Serialisieren eines Objekts