Utilizzo degli operatori CArchive << e >>
CArchive fornisce << e >> operatori per la scrittura e la lettura dei tipi di dati semplici nonché CObjects da un file.
Per memorizzare un oggetto in un file tramite un archivio
Nell'esempio seguente viene illustrato come memorizzare 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 precedentemente memorizzato in un file
Nell'esempio seguente viene illustrato come caricare un oggetto da un valore precedentemente memorizzato in un file:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
In genere, viene memorizzato e caricare i dati da un file tramite un archivio nelle funzioni di CObject- classi derivate di Serialize, è necessario dichiarare con la macro di DECLARE_SERIALIZE. Un riferimento a un oggetto di CArchive viene passato alla funzione di Serialize. Chiama la funzione di IsLoading dell'oggetto di CArchive per determinare se la funzione di Serialize è stata chiamata per caricare i dati dal file o da archiviare dati nel file.
La funzione di Serialize di CObjectserializzabile - classe derivata in genere presenta 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 sopra di codice è esattamente a quello di un AppWizard per creare la funzione di Serialize del documento (classe derivata da CDocument). Questo modello di codice consente di scrivere codice che è più facile rivedere, poiché il codice archiviando e il codice di caricamento devono essere sempre paralleli, come nel seguente esempio:
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 << e gli operatori di >> per CArchive come primo operando e i seguenti tipi di dati e tipi di classe come secondo operando:
CObject* |
DIMENSIONE e CSize |
float |
WORD |
CString |
PUNTO e CPoint |
DWORD |
BYTE |
RECT e CRect |
Double |
LONG |
CTime e CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
Nota
Archiviare e CObjectcaricare o tramite un archivio richiedono una considerazione aggiuntiva.Per ulteriori informazioni, vedere CObjects archiviando e di carico tramite un archivio.
Gli operatori di >> e di CArchive << restituiscono sempre un riferimento all'oggetto di CArchive, che è il primo operando. Ciò consente di concatenare operatori, come illustrato di seguito:
archive << m_strName << m_wAge;