Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Usando os operadores CArchive
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
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
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;