Udostępnij za pośrednictwem


Korzystanie z CArchive << i >> operatorów

CArchive udostępnia << operatory i >> do zapisywania i odczytywania prostych typów danych, a także CObjects do i z pliku.

Aby przechowywać obiekt w pliku za pośrednictwem archiwum

  1. W poniższym przykładzie pokazano, jak przechowywać obiekt w pliku za pośrednictwem archiwum:

    CArchive ar(&theFile, CArchive::store);
    WORD wEmployeeID = 78;
    ar << wEmployeeID;
    

Aby załadować obiekt z wartości wcześniej przechowywanej w pliku

  1. W poniższym przykładzie pokazano, jak załadować obiekt z wartości przechowywanej wcześniej w pliku:

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

Zwykle dane są przechowywane i ładowane do i z pliku za pośrednictwem archiwum w Serialize funkcjach klas pochodnych CObject, które należy zadeklarować za pomocą makra DECLARE_SERIALIZE. Odwołanie do CArchive obiektu jest przekazywane do Serialize funkcji. Wywołasz IsLoading funkcję obiektu, CArchive aby określić, czy Serialize funkcja została wywołana w celu załadowania danych z pliku lub przechowywania danych do pliku.

Funkcja Serialize klasy pochodnej z możliwością CObjectserializacji zwykle ma następującą postać:

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
   }
}

Powyższy szablon kodu jest dokładnie taki sam jak ten, który aplikacja AppWizard tworzy dla Serialize funkcji dokumentu (klasa pochodząca z CDocumentklasy ). Ten szablon kodu ułatwia pisanie kodu, który jest łatwiejszy do przejrzenia, ponieważ przechowywanie kodu i kod ładowania powinny być zawsze równoległe, jak w poniższym przykładzie:

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;
}

Biblioteka definiuje << operatory i >> jako CArchive pierwszy operand oraz następujące typy danych i typy klas jako drugi operand:

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTime i CTimeSpan
Double

DWORD
Float
Int
LONG

POINT i CPoint
RECT i CRect
SIZE i CSize
WORD

Uwaga

Przechowywanie i ładowanie CObjectplików za pośrednictwem archiwum wymaga dodatkowej uwagi. Aby uzyskać więcej informacji, zobacz Przechowywanie i ładowanie obiektów CObject za pośrednictwem archiwum.

Operatory CArchive<< i >> zawsze zwracają odwołanie do CArchive obiektu, który jest pierwszym operandem. Umożliwia to łączenie operatorów, jak pokazano poniżej:

archive << m_strName << m_wAge;

Zobacz też

Serializacja: serializacja obiektu