Použití CArchive <<
a >>
operátorů
CArchive
poskytuje << a >> operátory pro zápis a čtení jednoduchých datových typů a CObject
také do a ze souboru.
Uložení objektu do souboru prostřednictvím archivu
Následující příklad ukazuje, jak uložit objekt do souboru prostřednictvím archivu:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Načtení objektu z hodnoty, která byla dříve uložena v souboru
Následující příklad ukazuje, jak načíst objekt z hodnoty dříve uložené v souboru:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Obvykle ukládáte a načítáte data do souboru prostřednictvím archivu Serialize
ve funkcích -odvozených CObject
tříd, které musíte deklarovat pomocí DECLARE_SERIALIZE makra. Odkaz na CArchive
objekt se předá vaší Serialize
funkci. Zavoláte IsLoading
funkci objektu CArchive
, která určí, zda Serialize
byla volána funkce pro načtení dat ze souboru nebo uložení dat do souboru.
Funkce Serialize
serializovatelné CObject
-odvozené třídy obvykle má následující formu:
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
}
}
Výše uvedená šablona kódu je úplně stejná jako ta, která AppWizard vytvoří pro Serialize
funkci dokumentu (třída odvozená od CDocument
). Tato šablona kódu vám pomůže psát kód, který se snadněji kontroluje, protože ukládání kódu a načítání kódu by mělo být vždy paralelní, jako v následujícím příkladu:
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;
}
Knihovna definuje a >>
operátory <<
pro CArchive
první operand a následující datové typy a typy tříd jako druhý operand:
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime
a CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
a CPoint
RECT
a CRect
SIZE
a CSize
WORD
Poznámka
Ukládání a načítání CObject
přes archiv vyžaduje další důležité informace. Další informace naleznete v tématu Ukládání a načítání objektů CObject prostřednictvím archivu.
Operátory CArchive
<<
a >>
operátory vždy vrací odkaz na CArchive
objekt, což je první operand. To vám umožní zřetězovat operátory, jak je znázorněno níže:
archive << m_strName << m_wAge;