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;