Sdílet prostřednictvím


Použití CArchive << a >> operátorů

CArchive poskytuje << a >> operátory pro zápis a čtení jednoduchých datových typů a CObject pro zápis a čtení těchto dat do a ze souboru.

Uložení objektu do souboru prostřednictvím archivu

  1. 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

  1. 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 a ze souboru pomocí archivu Serialize ve funkcích odvozených tříd CObject, které musíte deklarovat pomocí makra DECLARE_SERIALIZE. Odkaz na CArchive objekt se předá vaší Serialize funkci. Zavoláte funkci IsLoading objektu CArchive ke zjištění, zda byla volána funkce Serialize pro načtení dat ze souboru nebo uložení dat do souboru.

Funkce třídy odvozené od Serialize, která je serializovatelná, 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 operátory << a >> pro CArchive jako 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í CObjectpř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 >> vždy vrací odkaz na objekt CArchive, což je první operand. Tím můžete operátory zřetězovat, jak je znázorněno níže:

archive << m_strName << m_wAge;

Viz také

Serializace: Serializace objektu