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;

Vedere anche

Concetti

Serializzazione: serializzare un oggetto