Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Uso degli operatori CArchive
CArchive fornisce operatori << e >> per scrivere e leggere tipi di dati semplici, nonché CObject per gestire file in entrata e in uscita.
Per archiviare un oggetto in un file tramite un archivio
L'esempio seguente illustra come archiviare un oggetto in un file tramite un archivio:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Per caricare un oggetto da un valore archiviato in precedenza in un file
Nell'esempio seguente viene illustrato come caricare un oggetto da un valore archiviato in precedenza in un file:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
In genere, si archiviano e caricano dati da e a un file tramite un archivio nelle funzioni Serialize delle classi derivate CObject, che devono essere dichiarate con la macro DECLARE_SERIALIZE. Un riferimento a un CArchive oggetto viene passato alla Serialize funzione. Chiamare la IsLoading funzione dell'oggetto CArchive per determinare se la Serialize funzione è stata chiamata per caricare dati dal file o archiviare i dati nel file.
La Serialize funzione di una classe serializzabile derivata da CObject ha in genere il formato seguente:
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
}
}
Il modello di codice precedente è esattamente uguale a quello creato da AppWizard per la Serialize funzione del documento (una classe derivata da CDocument). Questo modello di codice consente di scrivere codice più semplice da esaminare, perché l'archiviazione del codice e il codice di caricamento devono essere sempre paralleli, come nell'esempio seguente:
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 libreria definisce gli operatori << e >>, con CArchive come primo operando e i seguenti tipi di dati e di classe come secondo 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
Annotazioni
L'archiviazione e il caricamento di CObject tramite un archivio richiedono considerazioni aggiuntive. Per altre informazioni, vedere Archiviazione e caricamento di oggetti CObject tramite un archivio.
Gli CArchive<< operatori e >> restituiscono sempre un riferimento all'oggetto CArchive , ovvero il primo operando. In questo modo è possibile concatenare gli operatori, come illustrato di seguito:
archive << m_strName << m_wAge;