Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använda CArchive
CArchive tillhandahåller <<- och >>-operatorer för att skriva och läsa enkla datatyper samt CObject till och från en fil.
Så här lagrar du ett objekt i en fil via ett arkiv
I följande exempel visas hur du lagrar ett objekt i en fil via ett arkiv:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Läsa in ett objekt från ett värde som tidigare lagrats i en fil
I följande exempel visas hur du läser in ett objekt från ett värde som tidigare lagrats i en fil:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Vanligtvis lagrar och läser du in data till och från en fil via ett arkiv i Serialize-deriverade klassers CObject-funktioner, som du måste ha deklarerat med DECLARE_SERIALIZE-makro. En referens till ett CArchive objekt skickas till din Serialize funktion. Du anropar IsLoading objektets CArchive funktion för att avgöra om Serialize funktionen har anropats för att läsa in data från filen eller lagra data till filen.
Funktionen Serialize för en serialiserbar CObject-härledd klass har vanligtvis följande formulär:
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
}
}
Kodmallen ovan är exakt samma som den AppWizard skapar för Serialize dokumentets funktion (en klass som härleds från CDocument). Den här kodmallen hjälper dig att skriva kod som är enklare att granska, eftersom lagringskoden och inläsningskoden alltid ska vara parallella, som i följande exempel:
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;
}
Biblioteket definierar << och >> operatorer för CArchive som den första operanden och följande datatyper och klasstyper som den andra operanden:
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime och CTimeSpan
Double
DWORD
Float
Int
LONG
POINT och CPoint
RECT och CRect
SIZE och CSize
WORD
Anmärkning
Lagring och inläsning av CObject via ett arkiv kräver extra eftertanke. För mer information, se Lagra och läsa in CObjects via ett arkiv.
Operatorerna CArchive<< och >> returnerar alltid en referens till CArchive objektet, som är den första operanden. På så sätt kan du kedja operatorerna, som visas nedan:
archive << m_strName << m_wAge;