Usar os operadores CArchive << e >>

CArchive fornece operadores << e >> para escrever e ler tipos de dados simples, bem como CObjects de e para um arquivo.

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

  1. O exemplo a seguir mostra como armazenar um objeto em um arquivo por meio de um arquivo:

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

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

  1. 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;
    

Normalmente, você armazena e carrega dados de e para um arquivo por meio de um arquivo nas funções Serialize de classes derivadas CObject, que você deve ter declarado com a macro DECLARE_SERIALIZE. Uma referência a um objeto CArchive é passada para sua função Serialize. Você chama a função IsLoading do objeto CArchive para determinar se a função Serialize foi chamada para carregar dados do arquivo ou armazenar dados no arquivo.

A função Serialize de uma classe derivada serializável CObject normalmente tem a seguinte forma:

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 de código acima é exatamente o mesmo daquele que o AppWizard cria para a função Serialize do documento (uma classe derivada de CDocument). Esse modelo de código ajuda você a escrever um código mais fácil de examinar, pois o código de armazenamento e o código de carregamento sempre devem ser 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 os operadores << e >> para CArchive como o primeiro operando, e os seguintes tipos de dados e tipos de classe como o segundo operando:

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTime e CTimeSpan
Double

DWORD
Float
Int
LONG

POINT e CPoint
RECT e CRect
SIZE e CSize
WORD

Observação

Armazenar e carregar CObjects por meio de um arquivo morto requer consideração extra. Para obter mais informações, consulte Armazenar e carregar CObjects por meio de um arquivo.

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

archive << m_strName << m_wAge;

Confira também

Serialização: serializando um objeto