Použití operátorů CArchive << and >>
CArchiveposkytuje << a >> operátory pro zapisování a čtení jednoduchých datových typů a také CObjects do a ze souboru.
Uložení objektu v 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;
Chcete-li načíst objekt z hodnoty v souboru dříve uložena
Následující příklad ukazuje, jak načíst objekt z hodnoty dříve uložen do souboru:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Obvykle, ukládání a načítání dat do a ze souboru prostřednictvím archivu v Serialize funkce CObject-odvozené třídy, které musí být prohlášeny za s DECLARE_SERIALIZE makro.Odkaz na CArchive objekt je předán do Serialize funkce.Volání IsLoading funkce CArchive objekt, který chcete určit, zda Serialize funkce byla volána k načtení dat ze souboru nebo uložit data do souboru.
Serialize Funkce serializovatelný CObject-odvozené třídy obvykle má následující tvar:
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ý kód šablony je přesně stejný jako AppWizard vytvoří Serialize funkce dokumentu (třída odvozená z CDocument).Tento kód šablony umožňuje napsat kód, který je snáze kontrolovatelné, protože ukládání a načítání kód by měl 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;
}
Určuje knihovnu << a >> operátory pro CArchive jako první operand a následující datové typy a typy tříd jako druhý operand:
CObject* |
VELIKOST a CSize |
float |
WORD |
CString |
BOD aCPoint |
DWORD |
BYTE |
RECT a CRect |
Double |
DLOUHÝ |
CTime a CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
[!POZNÁMKA]
Ukládání a načítání CObjects pomocí archiv vyžaduje zvláštní pozornost.Další informace naleznete v tématu ukládání a načítání CObjects prostřednictvím archivu.
CArchive<< a >> subjekty vždy vrací odkaz CArchive objekt, který je první operand.To umožňuje zřetězení operátorů, jak je ukázáno níže:
archive << m_strName << m_wAge;