Partilhar via


Usando os operadores CArchive << e >>

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

Para armazenar um objeto num ficheiro através de um sistema de arquivamento

  1. O exemplo a seguir mostra como armazenar um objeto em um arquivo através de um ficheiro.

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

Para carregar um objeto a partir 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 ficheiro através de um arquivo nas funções Serialize de classes derivadas de CObject, que deve ter declarado com a macro DECLARE_SERIALIZE. Uma referência a um CArchive objeto é passada para sua Serialize função. Você chama a IsLoading função do CArchive objeto para determinar se a Serialize função foi chamada para carregar dados do arquivo ou armazenar dados para o arquivo.

A Serialize função de uma classe derivada serializável CObjectnormalmente 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 que o AppWizard cria para a Serialize função do documento (uma classe derivada de CDocument). Este modelo de código ajuda você a escrever um código mais fácil de revisar, porque o código de armazenamento e o código de carregamento devem ser 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 >> operadores para CArchive como primeiro operando e os seguintes tipos de dados e tipos de classe como 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 através de um arquivo requer consideração extra. Para obter mais informações, consulte Armazenar e carregar CObjects através de um arquivo.

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

archive << m_strName << m_wAge;

Ver também

Serialização: Serializando um objeto