Korzystanie z CArchive <<
i >>
operatorów
CArchive
udostępnia << operatory i >> do zapisywania i odczytywania prostych typów danych, a także CObject
s do i z pliku.
Aby przechowywać obiekt w pliku za pośrednictwem archiwum
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
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ą CObject
serializacji 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 CDocument
klasy ). 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 CObject
plikó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;