Partilhar via


Usando os operadores CArchive << and >>

CArchive fornece << e >> operadores para ler e gravar tipos de dados simples assim como CObjects para e de um arquivo.

Para armazenar um objeto em um arquivo por meio de um arquivo morto

  • O exemplo a seguir mostra como armazenar um objeto em um arquivo por meio de um arquivo morto:

    CArchive ar(&theFile, CArchive::store);
    WORD wEmployeeID = 78;
    ar << wEmployeeID;
    

Para carregar um objeto de um valor armazenado anteriormente em um arquivo

  • O exemplo a seguir mostra como carregar um objeto de um valor armazenado anteriormente em um arquivo:

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

Geralmente, você armazena e carregar dados para e de um arquivo por meio de um arquivo morto em funções de CObject- classes derivadas de Serialize , que deve ter declarado com a macro de DECLARE_SERIALIZE . Uma referência a um objeto de CArchive é transmitida à função de Serialize . Você chama a função de IsLoading do objeto de CArchive para determinar se a função de Serialize esteve chamada para carregar dados de um arquivo ou do repositório para o arquivo.

A função de Serialize de CObjectserializável - a classe derivada geralmente tem o seguinte formato:

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
   }
}

O modelo acima do código é exatamente igual ao AppWizard cria para a função de Serialize do documento (se uma classe derivada de CDocument). Ajuda desse modelo de código você escreve o código que é mais fácil de revisão, porque o código para armazenar e o código de carga devem estar sempre paralelos, como no exemplo a seguir:

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;
}

A biblioteca define << e os operadores de >> para CArchive como o primeiro operando e os seguintes tipos de dados e a classe digite como o segundo operando:

CObject*

SIZE e CSize

float

WORD

CString

POINT e CPoint

DWORD

BYTE

RECT e CRect

Double

LONG

CTime e CTimeSpan

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

Dica

Armazenar e carregar CObjects meio de um arquivo morto exigem consideração adicional.Para obter mais informações, consulte Armazenando e carregamento CObjects meio de um arquivo morto.

Os operadores de CArchive << e de >> sempre retornam uma referência ao objeto de CArchive , que é o primeiro operando. Isso permite que o encadeamento os operadores, como ilustrado abaixo:

archive << m_strName << m_wAge;

Consulte também

Conceitos

Serialização: serializando um objeto