Aracılığıyla paylaş


CArchive << ve >> İşleçleri Kullanma

CArchive<< >>, basit veri türlerinin yanı sıra CObjectbir dosyaya ve dosyadan s yazma ve okuma için ve işleçleri sağlar.

Bir nesneyi arşiv aracılığıyla bir dosyada depolamak için

  1. Aşağıdaki örnekte, bir nesnenin arşiv aracılığıyla bir dosyada nasıl depoluşu gösterilmektedir:

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

Daha önce dosyada depolanan bir değerden nesne yüklemek için

  1. Aşağıdaki örnekte, daha önce bir dosyada depolanan bir değerden bir nesnenin nasıl yüklenecekleri gösterilmektedir:

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

Genellikle, DECLARE_SERIALIZE makroyla bildirmiş olmanız gereken türetilmiş sınıfların Serialize CObjectişlevlerinde arşiv aracılığıyla bir dosyaya ve dosyadan veri depolar ve yüklersiniz. bir nesneye CArchive başvuru işlevinize Serialize geçirilir. İşlevin IsLoading CArchive dosyadan veri yüklemek veya dosyaya veri depolamak için çağrılıp çağrılmadığını Serialize belirlemek için nesnesinin işlevini çağırırsınız.

Seri Serialize hale getirilebilir CObjecttüretilmiş bir sınıfın işlevi genellikle aşağıdaki forma sahiptir:

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
   }
}

Yukarıdaki kod şablonu, AppWizard'ın belgenin işlevi için Serialize oluşturduğu (öğesinden CDocumenttüretilen bir sınıf) ile tam olarak aynıdır. Bu kod şablonu, aşağıdaki örnekte olduğu gibi depolama kodu ve yükleme kodu her zaman paralel olması gerektiğinden gözden geçirilmesi daha kolay bir kod yazmanıza yardımcı olur:

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;
}

Kitaplığı ilk işlenen olarak ve >> işleçleriniCArchive, ikinci işlenen olarak da aşağıdaki veri türlerini ve sınıf türlerini tanımlar<<:

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTime ve CTimeSpan
Double

DWORD
Float
Int
LONG

POINT ve CPoint
RECT ve CRect
SIZE ve CSize
WORD

Dekont

Bir arşiv aracılığıyla depolamak ve yüklemek CObjectiçin ek dikkate alınması gerekir. Daha fazla bilgi için bkz . CObjects'i Arşiv aracılığıyla depolama ve yükleme.

CArchive<< ve >> işleçleri her zaman ilk işlenen olan nesneye CArchive bir başvuru döndürür. Bu, aşağıda gösterildiği gibi işleçleri zincirlemenizi sağlar:

archive << m_strName << m_wAge;

Ayrıca bkz.

Seri hale getirme: Bir Nesneyi Seri Hale Getirme