Uso di CArchive <<
and >>
Operators
CArchive
fornisce << operatori e >> per la scrittura e la lettura di tipi di dati semplici, nonché CObject
da e verso un file.
Per archiviare un oggetto in un file tramite un archivio
L'esempio seguente illustra come archiviare un oggetto in un file tramite un archivio:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Per caricare un oggetto da un valore archiviato in precedenza in un file
Nell'esempio seguente viene illustrato come caricare un oggetto da un valore archiviato in precedenza in un file:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
In genere, si archiviano e caricano dati da e verso un file tramite un archivio nelle Serialize
funzioni delle CObject
classi derivate da , che è necessario aver dichiarato con la macro DECLARE_edizione Standard RIALIZE. Un riferimento a un CArchive
oggetto viene passato alla Serialize
funzione. Chiamare la IsLoading
funzione dell'oggetto CArchive
per determinare se la Serialize
funzione è stata chiamata per caricare dati dal file o archiviare i dati nel file.
La Serialize
funzione di una classe derivata da serializzabile CObject
ha in genere il formato seguente:
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
}
}
Il modello di codice precedente è esattamente uguale a quello creato da AppWizard per la Serialize
funzione del documento (una classe derivata da CDocument
). Questo modello di codice consente di scrivere codice più semplice da esaminare, perché l'archiviazione del codice e il codice di caricamento devono essere sempre paralleli, come nell'esempio seguente:
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;
}
La libreria definisce <<
gli operatori e >>
per CArchive
come primo operando e i tipi di dati e i tipi di classe seguenti come secondo operando:
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime
e CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
e CPoint
RECT
e CRect
SIZE
e CSize
WORD
Nota
L'archiviazione e il caricamento CObject
di tramite un archivio richiedono considerazioni aggiuntive. Per altre informazioni, vedere Archiviazione e caricamento di oggetti CObject tramite un archivio.
Gli CArchive
<<
operatori e >>
restituiscono sempre un riferimento all'oggetto CArchive
, ovvero il primo operando. In questo modo è possibile concatenare gli operatori, come illustrato di seguito:
archive << m_strName << m_wAge;