Verwenden der CArchive << und >> Operatoren

CArchive bietet << und Operatoren zum Schreiben und >> Lesen einfacher Datentypen sowie CObjectzu 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;
    

In der Regel speichern und laden Sie Daten über ein Archiv in den Serialize Funktionen von CObjectabgeleiteten Klassen, die Sie mit dem DECLARE_SERIALIZE-Makro 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 obige Codevorlage ist identisch mit der AppWizard-Vorlage, die für die Serialize Funktion des Dokuments erstellt wird (eine von CDocument). 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 den ersten Operanden und die folgenden Datentypen << 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 CObjectvon S über ein Archiv erfordert zusätzliche Überlegungen. Weitere Informationen finden Sie unter Speichern und Laden von CObjects über ein Archiv.

Die CArchive<< Operatoren geben >> immer einen Verweis auf das CArchive Objekt zurück, bei dem es sich um den ersten Operanden handelt. Auf diese Weise können Sie die Operatoren verketten, wie unten dargestellt:

archive << m_strName << m_wAge;

Siehe auch

Serialisierung: Serialisieren eines Objekts