Utilizzando il CArchive << e >> operatori
CArchive fornisce gli operatori di >> e di << per la scrittura e la lettura dei tipi di dati semplici nonché CObjectoggetti in un file.
Per memorizzare un oggetto in un file mediante un archivio
Nell'esempio seguente viene illustrato come memorizzare un oggetto in un file mediante 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, si archiviano e caricare i dati in un file mediante un archivio nelle funzioni di CObjectdi classi derivate di Serialize , che è necessario dichiarare con la macro di DECLARE_SERIALIZE .Un riferimento a un oggetto di CArchive viene passato alla funzione di Serialize .Chiamare la funzione di IsLoading dell'oggetto di CArchive per determinare se la funzione di Serialize è stata chiamata per caricare i dati da archiviare o del file.
La funzione di Serialize di CObjectserializzabile nella 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 uguale a un AppWizard crei per la funzione di Serialize di documento (classe derivata da CDocument).Questo modello di codice consente di scrivere il codice che è più facile rivedere, perché il codice archiviante 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 raccolta 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 |
POINT e CPoint |
DWORD |
BYTE |
RECT e CRect. |
Double |
LONG |
CTime e CTimeSpan. |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
[!NOTA]
Archiviare e CObjectcaricare gli oggetti mediante un archivio richiedono una considerazione aggiuntiva.Per ulteriori informazioni, vedere CObjects archiviante e di carico tramite un archivio.
Gli operatori di >> e di CArchive << restituiscono sempre un riferimento a un oggetto di CArchive , che è il primo operando.Ciò consente di concatenare gli operatori, come illustrato di seguito:
archive << m_strName << m_wAge;