Condividi tramite


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;

Vedere anche

Concetti

Serializzazione: serializzazione di un oggetto