Verwenden des CArchive << und >> der Operatoren
CArchive stellt << und >> Operatoren zum Schreiben und Lesen von einfachen Datentypen sowie CObject s in bzw. aus einer Datei.
So fügen Sie ein Objekt in einer Datei zu einem Archiv speichern
Im folgenden Beispiel wird veranschaulicht, wie ein Objekt in einer Datei zu einem Archiv gespeichert werden:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
So fügen Sie ein Objekt aus einem Wert in einer Datei gespeichert, die zuvor laden
Im folgenden Beispiel wird veranschaulicht, wie ein Objekt von einem Wert lädt, der zuvor in einer Datei gespeichert wird:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Normalerweise speichern und laden Sie Daten in eine und aus einer Datei zu einem Archiv in den Serialize-Funktionen von CObject abgeleitete Klassen, die Sie mit dem DECLARE_SERIALIZE Makro deklariert haben müssen.Ein Verweis auf ein CArchive-Objekt wird an die Serialize-Funktion übergeben.Sie rufen die IsLoading-Funktion des CArchive-Objekts auf, um zu bestimmen, ob die Serialize-Funktion aufgerufen wurde, um Daten aus den Datei- oder Speichern von Daten in die Datei zu laden.
Die Serialize-Funktion von serialisierbaren CObject abgeleitete Klasse verfügt i. d. R. das folgende Format:
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 Code genau die gleiche Vorlage handelt, der ein Anwendungs-Assistent für die Serialize-Funktion des Dokuments erstellt eine Klasse (abgeleitet von CDocument).Diese Vorlage hilft Ihnen, Code zu schreiben, der Code einfacher, da der speichernde Code und der Code immer parallel geladen werden sollten, wie im folgenden Beispiel zu überprüfen:
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 der erste Operand und die folgenden Datentypen und Klassentypen als der zweite Operand:
CObject* |
SIZE und CSize |
float |
WORD |
CString |
POINT und CPoint |
DWORD |
BYTE |
RECT und CRect |
Double |
LONG |
CTime und CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
Hinweis |
---|
Zum Speichern und Laden von CObject s über ein Archiv erfordert weitere Überlegung.Weitere Informationen finden Sie unter CObjects über ein Archiv Laden und Speichern. |
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 im Folgenden gezeigt:
archive << m_strName << m_wAge;