Usando o CArchive << e >> Operadores
CArchiveFornece << e >> operadores para gravação e leitura de tipos de dados simples, bem como CObjects 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 morto:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Para carregar um objeto de um valor anteriormente armazenado em um arquivo
O exemplo a seguir mostra como carregar um objeto de um valor anteriormente armazenado em um arquivo:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Normalmente, você pode armazenar e carregar dados de um arquivo através de um sistema de arquivamento e o Serialize funções de CObject-derivadas de classes, você deve ter declarado com o DECLARE_SERIALIZE macro.Uma referência a um CArchive objeto é passado para o Serialize função.Chamar o IsLoading função do CArchive objeto para determinar se o Serialize a função foi chamada para carregar dados do arquivo ou armazenar dados no arquivo.
O Serialize a função de um serializável CObject-derivado classe 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 como um AppWizard cria para o Serialize função do documento (uma classe derivada de CDocument).Este modelo de código ajuda a escrever código que é mais fácil de analisar, porque o armazenar código e o código de carregamento devem sempre 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;
}
Define a biblioteca << e >> operadores para CArchive como o primeiro operando e os seguintes tipos de dados e tipos de classe como o segundo operando:
CObject* |
TAMANHO e CSize |
float |
PALAVRA |
CString |
PONTO eCPoint |
DWORD |
BYTE |
RECT e CRect |
Double |
LONGO |
CTime e CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
Observação |
---|
Armazenar e carregando CObjects por meio de um arquivo requer considerações extra.Para obter mais informações, consulte Storing e carregando CObjects via um arquivo. |
O CArchive << e >> operadores sempre retornam uma referência a CArchive objeto, que é o primeiro operando.Isso permite que você encadear os operadores, como ilustrado abaixo:
archive << m_strName << m_wAge;