Utilisation de CArchive <<
et >>
d’opérateurs
CArchive
fournit << et >> opérateurs pour l’écriture et la lecture de types de données simples, ainsi que CObject
vers et à partir d’un fichier.
Pour stocker un objet dans un fichier via une archive
L’exemple suivant montre comment stocker un objet dans un fichier via une archive :
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Pour charger un objet à partir d’une valeur précédemment stockée dans un fichier
L’exemple suivant montre comment charger un objet à partir d’une valeur précédemment stockée dans un fichier :
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
En règle générale, vous stockez et chargez des données vers et à partir d’un fichier via une archive dans les Serialize
fonctions des CObject
classes dérivées, que vous devez avoir déclarées avec la macro DECLARE_SERIALIZE. Une référence à un CArchive
objet est passée à votre Serialize
fonction. Vous appelez la IsLoading
fonction de l’objet CArchive
pour déterminer si la Serialize
fonction a été appelée pour charger des données à partir du fichier ou stocker des données dans le fichier.
La Serialize
fonction d’une classe dérivée sérialisable CObject
a généralement la forme suivante :
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
}
}
Le modèle de code ci-dessus est exactement le même que celui créé par AppWizard pour la Serialize
fonction du document (une classe dérivée de CDocument
). Ce modèle de code vous aide à écrire du code plus facile à examiner, car le code de stockage et le code de chargement doivent toujours être parallèles, comme dans l’exemple suivant :
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;
}
La bibliothèque définit <<
et >>
les opérateurs pour CArchive
le premier opérande et les types de données et les types de classes suivants comme deuxième opérande :
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime
et CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
et CPoint
RECT
et CRect
SIZE
et CSize
WORD
Remarque
Le stockage et le chargement CObject
de s via une archive nécessitent une considération supplémentaire. Pour plus d’informations, consultez Stockage et chargement de CObjects via une archive.
Les CArchive
<<
opérateurs retournent >>
toujours une référence à l’objet CArchive
, qui est le premier opérande. Cela vous permet de chaîner les opérateurs, comme illustré ci-dessous :
archive << m_strName << m_wAge;