Verwenden der CArchive <<
und >>
Operatoren
CArchive
bietet << und Operatoren zum Schreiben und >> Lesen einfacher Datentypen sowie CObject
zu und aus einer Datei.
So speichern Sie ein Objekt in einer Datei über ein Archiv
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
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 CObject
abgeleiteten 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 CObject
abgeleiteten 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 CObject
von 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;