Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Usando os operadores CArchive
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 arquivamento.
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 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 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 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 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 que o appWizard cria para a Serialize função 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 CArchive<< operadores e os >> operadores sempre retornam uma referência ao CArchive objeto, que é o primeiro operando. Isso permite encadear os operadores, conforme ilustrado abaixo:
archive << m_strName << m_wAge;