Klasa CArchiveCArchive Class

Umożliwia zapisanie złożonej sieci obiektów w trwałej postaci binarnej (zazwyczaj magazynu dyskowego), która będzie trwała po usunięciu obiektów.Allows you to save a complex network of objects in a permanent binary form (usually disk storage) that persists after those objects are deleted.

SkładniaSyntax

class CArchive

Elementy członkowskieMembers

Konstruktory publicznePublic Constructors

NazwaName OpisDescription
CArchive:: CArchiveCArchive::CArchive Tworzy obiekt CArchive.Creates a CArchive object.

Metody publicznePublic Methods

NazwaName OpisDescription
CArchive:: AbortCArchive::Abort Zamyka archiwum bez zgłaszania wyjątku.Closes an archive without throwing an exception.
CArchive:: CloseCArchive::Close Opróżnia niezapisywane dane i rozłącza od CFile .Flushes unwritten data and disconnects from the CFile.
CArchive:: FlushCArchive::Flush Opróżnia niezapisywane dane z buforu archiwum.Flushes unwritten data from the archive buffer.
CArchive:: GetFileCArchive::GetFile Pobiera CFile wskaźnik obiektu dla tego archiwum.Gets the CFile object pointer for this archive.
CArchive:: GetObjectSchemaCArchive::GetObjectSchema Wywoływana z Serialize funkcji w celu określenia wersji obiektu, który jest deserializowany.Called from the Serialize function to determine the version of the object that is being deserialized.
CArchive:: IsBufferEmptyCArchive::IsBufferEmpty Określa, czy bufor został opróżniony podczas procesu odbierania Windows Sockets.Determines whether the buffer has been emptied during a Windows Sockets receive process.
CArchive:: IsLoadingCArchive::IsLoading Określa, czy archiwum jest ładowane.Determines whether the archive is loading.
CArchive:: isprzechowywanieCArchive::IsStoring Określa, czy archiwum jest przechowywane.Determines whether the archive is storing.
CArchive:: MapObjectCArchive::MapObject Umieszcza obiekty w mapie, które nie są serializowane do pliku, ale są dostępne dla podobiektów do odwołania.Places objects in the map that are not serialized to the file, but that are available for subobjects to reference.
CArchive:: ReadCArchive::Read Odczytuje nieprzetworzone bajty.Reads raw bytes.
CArchive:: ReadClassCArchive::ReadClass Odczytuje odwołanie do klasy poprzednio przechowywane w WriteClass .Reads a class reference previously stored with WriteClass.
CArchive:: ReadObjectCArchive::ReadObject Wywołuje Serialize funkcję obiektu do załadowania.Calls an object's Serialize function for loading.
CArchive:: ReadStringCArchive::ReadString Odczytuje pojedynczy wiersz tekstu.Reads a single line of text.
CArchive:: SerializeClassCArchive::SerializeClass Odczytuje lub zapisuje odwołanie klasy do obiektu w CArchive zależności od kierunku CArchive .Reads or writes the class reference to the CArchive object depending on the direction of the CArchive.
CArchive:: SetLoadParamsCArchive::SetLoadParams Ustawia rozmiar, do którego zostanie powiększona tablica obciążenia.Sets the size to which the load array grows. Musi być wywoływana przed załadowaniem dowolnego obiektu lub MapObject przed ReadObject wywołaniem lub.Must be called before any object is loaded or before MapObject or ReadObject is called.
CArchive:: SetObjectSchemaCArchive::SetObjectSchema Ustawia schemat obiektu przechowywany w obiekcie archiwum.Sets the object schema stored in the archive object.
CArchive:: SetStoreParamsCArchive::SetStoreParams Ustawia rozmiar tabeli skrótu i rozmiar bloku mapy używany do identyfikowania unikatowych obiektów w procesie serializacji.Sets the hash table size and the block size of the map used to identify unique objects during the serialization process.
CArchive:: WriteCArchive::Write Zapisuje nieprzetworzone bajty.Writes raw bytes.
CArchive:: WriteClassCArchive::WriteClass Zapisuje odwołanie do CRuntimeClass CArchive .Writes a reference to the CRuntimeClass to the CArchive.
CArchive:: WriteObjectCArchive::WriteObject Wywołuje Serialize funkcję obiektu do przechowywania.Calls an object's Serialize function for storing.
CArchive:: WriteStringCArchive::WriteString Zapisuje pojedynczy wiersz tekstu.Writes a single line of text.

Operatory publicznePublic Operators

NazwaName OpisDescription
CArchive:: operator <<CArchive::operator << Przechowuje obiekty i typy pierwotne w archiwum.Stores objects and primitive types to the archive.
CArchive:: operator >>CArchive::operator >> Ładuje obiekty i typy pierwotne z archiwum.Loads objects and primitive types from the archive.

Publiczne elementy członkowskie danychPublic Data Members

NazwaName OpisDescription
CArchive:: m_pDocumentCArchive::m_pDocument

UwagiRemarks

CArchive nie ma klasy bazowej.CArchive does not have a base class.

Później można załadować obiekty z magazynu trwałego, odtworząc je w pamięci.Later you can load the objects from persistent storage, reconstituting them in memory. Ten proces tworzenia trwałych danych jest nazywany "serializacji".This process of making data persistent is called "serialization."

Obiekt archiwum można traktować jako rodzaj strumienia binarnego.You can think of an archive object as a kind of binary stream. Podobnie jak w przypadku strumienia danych wejściowych/wyjściowych, archiwum jest skojarzone z plikiem i pozwala na zbuforowane zapisywanie i odczytywanie danych do i z magazynu.Like an input/output stream, an archive is associated with a file and permits the buffered writing and reading of data to and from storage. Strumień danych wejściowych/wyjściowych przetwarza sekwencje znaków ASCII, ale archiwum przetwarza dane obiektów binarnych w wydajny, nadmiarowy format.An input/output stream processes sequences of ASCII characters, but an archive processes binary object data in an efficient, nonredundant format.

Aby można było utworzyć obiekt, należy utworzyć obiekt CFile CArchive .You must create a CFile object before you can create a CArchive object. Ponadto należy upewnić się, że stan załadowania/przechowywania archiwum jest zgodny z trybem otwartym pliku.In addition, you must ensure that the archive's load/store status is compatible with the file's open mode. Masz ograniczone do jednego aktywnego Archiwum na plik.You are limited to one active archive per file.

Podczas konstruowania CArchive obiektu, należy dołączyć go do obiektu klasy CFile (lub klasy pochodnej), która reprezentuje otwarty plik.When you construct a CArchive object, you attach it to an object of class CFile (or a derived class) that represents an open file. Należy również określić, czy archiwum będzie używane do ładowania, czy przechowywania.You also specify whether the archive will be used for loading or storing. CArchiveObiekt może przetworzyć nie tylko typy pierwotne, ale również obiekty klas pochodnych CObjectzaprojektowanych do serializacji.A CArchive object can process not only primitive types but also objects of CObject-derived classes designed for serialization. Klasa możliwa do serializacji ma zwykle Serialize funkcję członkowską i zwykle używa makr DECLARE_SERIAL i IMPLEMENT_SERIAL , zgodnie z opisem w klasie CObject .A serializable class usually has a Serialize member function, and it usually uses the DECLARE_SERIAL and IMPLEMENT_SERIAL macros, as described under class CObject.

Przeciążone operatory wyodrębniania ( >> ) i wstawiania ( << ) to wygodne interfejsy programowania archiwum, które obsługują zarówno typy pierwotne, jak i CObject klasy pochodne.The overloaded extraction ( >>) and insertion ( <<) operators are convenient archive programming interfaces that support both primitive types and CObject-derived classes.

CArchive obsługuje także programowanie z klasami Windows Sockets MFC CSocket i CSocketFile.CArchive also supports programming with the MFC Windows Sockets classes CSocket and CSocketFile. Funkcja członkowska IsBufferEmpty obsługuje to użycie.The IsBufferEmpty member function supports that usage.

Aby uzyskać więcej informacji na temat CArchive , zobacz artykuł serializacji i Windows Sockets: używanie gniazd z archiwami.For more information on CArchive, see the articles Serialization and Windows Sockets: Using Sockets with Archives.

Hierarchia dziedziczeniaInheritance Hierarchy

CArchive

WymaganiaRequirements

Nagłówek: AFX. hHeader: afx.h

CArchive:: AbortCArchive::Abort

Wywołaj tę funkcję, aby zamknąć archiwum bez zgłaszania wyjątku.Call this function to close the archive without throwing an exception.

void Abort ();

UwagiRemarks

CArchiveDestruktor będzie zazwyczaj wywoływany Close , co spowoduje opróżnienie wszystkich danych, które nie zostały zapisane w skojarzonym CFile obiekcie.The CArchive destructor will normally call Close, which will flush any data that has not been saved to the associated CFile object. Może to spowodować wyjątki.This can cause exceptions.

Podczas przechwytywania tych wyjątków dobrym pomysłem jest użycie Abort , aby destruktor CArchive obiektu nie powodował dalszych wyjątków.When catching these exceptions, it is a good idea to use Abort, so that destructing the CArchive object doesn't cause further exceptions. Podczas obsługi wyjątków CArchive::Abort nie zostanie zgłoszony wyjątek w przypadku błędów, ponieważ, w przeciwieństwie do CArchive:: Close, Abort ignoruje błędy.When handling exceptions, CArchive::Abort will not throw an exception on failures because, unlike CArchive::Close, Abort ignores failures.

Jeśli użyto new do przydzielenia CArchive obiektu na stercie, należy go usunąć po zamknięciu pliku.If you used new to allocate the CArchive object on the heap, then you must delete it after closing the file.

PrzykładExample

Zobacz przykład dla CArchive:: WriteClass.See the example for CArchive::WriteClass.

CArchive:: CArchiveCArchive::CArchive

Konstruuje CArchive obiekt i określa, czy będzie on używany do ładowania lub przechowywania obiektów.Constructs a CArchive object and specifies whether it will be used for loading or storing objects.

CArchive(
    CFile* pFile,
    UINT nMode,
    int nBufSize = 4096,
    void* lpBuf = NULL);

ParametryParameters

pFilepFile
Wskaźnik do CFile obiektu, który jest ostatecznym źródłem lub miejscem docelowym danych trwałych.A pointer to the CFile object that is the ultimate source or destination of the persistent data.

nModenMode
Flaga określająca, czy obiekty będą ładowane z lub przechowywane w archiwum.A flag that specifies whether objects will be loaded from or stored to the archive. Parametr nMode musi mieć jedną z następujących wartości:The nMode parameter must have one of the following values:

  • CArchive::load Ładuje dane z archiwum.CArchive::load Loads data from the archive. Wymaga tylko CFile uprawnienia do odczytu.Requires only CFile read permission.

  • CArchive::store Zapisuje dane w archiwum.CArchive::store Saves data to the archive. Wymaga CFile uprawnień do zapisu.Requires CFile write permission.

  • CArchive::bNoFlushOnDelete Uniemożliwia automatyczne wywoływanie Archiwum Flush po wywołaniu destruktora archiwum.CArchive::bNoFlushOnDelete Prevents the archive from automatically calling Flush when the archive destructor is called. Jeśli ustawisz tę flagę, użytkownik jest odpowiedzialny za jawne wywołanie Close przed wywołaniem destruktora.If you set this flag, you are responsible for explicitly calling Close before the destructor is called. Jeśli tego nie zrobisz, Twoje dane będą uszkodzone.If you do not, your data will be corrupted.

nBufSizenBufSize
Liczba całkowita określająca rozmiar wewnętrznego bufora plików (w bajtach).An integer that specifies the size of the internal file buffer, in bytes. Należy pamiętać, że domyślny rozmiar buforu to 4 096 bajtów.Note that the default buffer size is 4,096 bytes. W przypadku rutynowej archiwizacji dużych obiektów poprawisz wydajność, jeśli używasz większego rozmiaru buforu, który jest wielokrotnością rozmiaru buforu pliku.If you routinely archive large objects, you will improve performance if you use a larger buffer size that is a multiple of the file buffer size.

lpBuflpBuf
Opcjonalny wskaźnik do buforu dostarczonego przez użytkownika o rozmiarze nBufSize.An optional pointer to a user-supplied buffer of size nBufSize. Jeśli ten parametr nie zostanie określony, archiwum przydzieli bufor ze sterty lokalnej i zwolni go, gdy obiekt zostanie zniszczony.If you do not specify this parameter, the archive allocates a buffer from the local heap and frees it when the object is destroyed. Archiwum nie zwalnia buforu dostarczonego przez użytkownika.The archive does not free a user-supplied buffer.

UwagiRemarks

Nie można zmienić tej specyfikacji po utworzeniu archiwum.You cannot change this specification after you have created the archive.

Nie można używać CFile operacji do zmiany stanu pliku do momentu zamknięcia archiwum.You may not use CFile operations to alter the state of the file until you have closed the archive. Każda taka operacja spowoduje uszkodzenie integralności archiwum.Any such operation will damage the integrity of the archive. Możesz uzyskać dostęp do pozycji wskaźnika pliku w dowolnym momencie podczas serializacji, uzyskując obiekt pliku archiwum z funkcji elementu członkowskiego GetFile , a następnie używając funkcji CFile:: GetPosition .You may access the position of the file pointer at any time during serialization by obtaining the archive's file object from the GetFile member function and then using the CFile::GetPosition function. Należy wywołać metodę CArchive:: Flush przed uzyskaniem pozycji wskaźnika pliku.You should call CArchive::Flush before obtaining the position of the file pointer.

PrzykładExample

CFile file;
TCHAR szBuf[512];
if (!file.Open(_T("CArchive__test__file.txt"),
               CFile::modeCreate | CFile::modeWrite))
{
#ifdef _DEBUG
   AFXDUMP(_T("Unable to open file\n"));
   exit(1);
#endif
}
CArchive ar(&file, CArchive::store, 512, szBuf);

CArchive:: CloseCArchive::Close

Opróżnia wszystkie pozostałe dane w buforze, zamyka archiwum i rozłącza archiwum z pliku.Flushes any data remaining in the buffer, closes the archive, and disconnects the archive from the file.

void Close();

UwagiRemarks

Żadne dalsze operacje na archiwum nie są dozwolone.No further operations on the archive are permitted. Po zamknięciu archiwum można utworzyć inne Archiwum dla tego samego pliku lub zamknąć plik.After you close an archive, you can create another archive for the same file or you can close the file.

Funkcja członkowska Close zapewnia, że wszystkie dane są przesyłane z archiwum do pliku i uniemożliwiają dostęp do archiwum.The member function Close ensures that all data is transferred from the archive to the file, and it makes the archive unavailable. Aby ukończyć transfer z pliku do nośnika magazynu, należy najpierw użyć CFile:: Close , a następnie zniszczyć CFile obiekt.To complete the transfer from the file to the storage medium, you must first use CFile::Close and then destroy the CFile object.

PrzykładExample

Zobacz przykład dla CArchive:: WriteString.See the example for CArchive::WriteString.

CArchive:: FlushCArchive::Flush

Wymusza, aby wszystkie pozostałe dane w buforze archiwum były zapisywane do pliku.Forces any data remaining in the archive buffer to be written to the file.

void Flush();

UwagiRemarks

Funkcja członkowska Flush gwarantuje, że wszystkie dane są przesyłane z archiwum do pliku.The member function Flush ensures that all data is transferred from the archive to the file. Musisz wywołać CFile:: Close , aby zakończyć transfer z pliku na nośnik magazynujący.You must call CFile::Close to complete the transfer from the file to the storage medium.

PrzykładExample

CFile myFile(_T("CArchive__test__file.txt"),
             CFile::modeCreate | CFile::modeWrite);
CArchive ar(&myFile, CArchive::store);

// Write a string to the archive.
ar.WriteString(_T("My string."));

// Flush all of the data to the file.
ar.Flush();

CArchive:: GetFileCArchive::GetFile

Pobiera CFile wskaźnik obiektu dla tego archiwum.Gets the CFile object pointer for this archive.

CFile* GetFile() const;

Wartość zwracanaReturn Value

Stały wskaźnik do CFile obiektu w użyciu.A constant pointer to the CFile object in use.

UwagiRemarks

Należy opróżnić archiwum przed użyciem GetFile .You must flush the archive before using GetFile.

PrzykładExample

const CFile *fp = ar.GetFile();

CArchive:: GetObjectSchemaCArchive::GetObjectSchema

Wywołaj tę funkcję z Serialize funkcji, aby określić wersję obiektu, który jest obecnie deserializowany.Call this function from the Serialize function to determine the version of the object that is currently being deserialized.

UINT GetObjectSchema();

Wartość zwracanaReturn Value

Podczas deserializacji wersja obiektu jest odczytywana.During deserialization, the version of the object being read.

UwagiRemarks

Wywołanie tej funkcji jest prawidłowe tylko wtedy, gdy CArchive obiekt jest ładowany ( CArchive:: IsLoading zwraca wartość różną od zera).Calling this function is only valid when the CArchive object is being loaded ( CArchive::IsLoading returns nonzero). Powinno to być pierwsze wywołanie Serialize funkcji i wywoływana tylko raz.It should be the first call in the Serialize function and called only once. Wartość zwracana przez (UINT)-1 oznacza, że numer wersji jest nieznany.A return value of ( UINT)-1 indicates that the version number is unknown.

CObjectKlasa pochodna może używać VERSIONABLE_SCHEMA połączonej (przy użyciu bitowej lub) z samą wersją schematu (w makrze IMPLEMENT_SERIAL), aby utworzyć "obiekt z obsługą wersji", czyli obiekt, którego Serialize funkcja członkowska może odczytywać wiele wersji.A CObject-derived class may use VERSIONABLE_SCHEMA combined (using bitwise OR) with the schema version itself (in the IMPLEMENT_SERIAL macro) to create a "versionable object," that is, an object whose Serialize member function can read multiple versions. Domyślna funkcjonalność platformy (bez VERSIONABLE_SCHEMA) to zgłoszenie wyjątku, gdy wersja jest niezgodna.The default framework functionality (without VERSIONABLE_SCHEMA) is to throw an exception when the version is mismatched.

PrzykładExample

IMPLEMENT_SERIAL(CSchemaObject, CObject, VERSIONABLE_SCHEMA | 1)

void CSchemaObject::Serialize(CArchive &ar)
{
   CObject::Serialize(ar);

   if (ar.IsLoading())
   {
      int nVersion = ar.GetObjectSchema();

      switch (nVersion)
      {
      case 0:
         // read in previous version of
         // this object
         break;
      case 1:
         // read in current version of
         // this object
         break;
      default:
         // report unknown version of
         // this object
         break;
      }
   }
   else
   {
      // Normal storing code goes here
   }
}

CArchive:: IsBufferEmptyCArchive::IsBufferEmpty

Wywołaj tę funkcję elementu członkowskiego, aby określić, czy wewnętrzny bufor obiektu archiwum jest pusty.Call this member function to determine whether the archive object's internal buffer is empty.

BOOL IsBufferEmpty() const;

Wartość zwracanaReturn Value

Różne od zera, jeśli bufor archiwum jest pusty; w przeciwnym razie 0.Nonzero if the archive's buffer is empty; otherwise 0.

UwagiRemarks

Ta funkcja jest dostarczana do obsługi programowania przy użyciu klasy Windows Sockets MFC CSocketFile .This function is supplied to support programming with the MFC Windows Sockets class CSocketFile. Nie trzeba używać jej do archiwizacji skojarzonej z CFile obiektem.You do not need to use it for an archive associated with a CFile object.

Przyczyną użycia IsBufferEmpty z archiwum skojarzoną z CSocketFile obiektem jest fakt, że bufor archiwum może zawierać więcej niż jeden komunikat lub rekord.The reason for using IsBufferEmpty with an archive associated with a CSocketFile object is that the archive's buffer might contain more than one message or record. Po otrzymaniu jednego komunikatu należy użyć IsBufferEmpty programu, aby kontrolować pętlę, która kontynuuje pobieranie danych do momentu, gdy bufor jest pusty.After receiving one message, you should use IsBufferEmpty to control a loop that continues receiving data until the buffer is empty. Aby uzyskać więcej informacji, zobacz Funkcja odbierania elementu członkowskiego klasy CAsyncSocket , która pokazuje, jak używać IsBufferEmpty .For more information, see the Receive member function of class CAsyncSocket, which shows how to use IsBufferEmpty.

Aby uzyskać więcej informacji, zobacz Windows Sockets: używanie gniazd z archiwami.For more information, see Windows Sockets: Using Sockets with Archives.

CArchive:: IsLoadingCArchive::IsLoading

Określa, czy archiwum ładuje dane.Determines whether the archive is loading data.

BOOL IsLoading() const;

Wartość zwracanaReturn Value

Różne od zera, jeśli archiwum jest aktualnie używane do ładowania; w przeciwnym razie 0.Nonzero if the archive is currently being used for loading; otherwise 0.

UwagiRemarks

Ta funkcja członkowska jest wywoływana przez Serialize funkcje archiwizowanych klas.This member function is called by the Serialize functions of the archived classes.

PrzykładExample

int i = 0;
if (ar.IsLoading())
   ar >> i;
else
   ar << i;

CArchive:: isprzechowywanieCArchive::IsStoring

Określa, czy archiwum przechowuje dane.Determines whether the archive is storing data.

BOOL IsStoring() const;

Wartość zwracanaReturn Value

Różne od zera, jeśli archiwum jest aktualnie używane do przechowywania; w przeciwnym razie 0.Nonzero if the archive is currently being used for storing; otherwise 0.

UwagiRemarks

Ta funkcja członkowska jest wywoływana przez Serialize funkcje archiwizowanych klas.This member function is called by the Serialize functions of the archived classes.

Jeśli IsStoring stan archiwum jest różny od zera, jego IsLoading stan to 0 i odwrotnie.If the IsStoring status of an archive is nonzero, then its IsLoading status is 0, and vice versa.

PrzykładExample

int i = 0;
if (ar.IsStoring())
   ar << i;
else
   ar >> i;

CArchive:: MapObjectCArchive::MapObject

Wywołaj tę funkcję elementu członkowskiego, aby umieścić obiekty w mapie, które nie są naprawdę serializowane do pliku, ale które są dostępne dla podobiektów do odwołania.Call this member function to place objects in the map that are not really serialized to the file, but that are available for subobjects to reference.

void MapObject(const CObject* pOb);

ParametryParameters

pObpOb
Stały wskaźnik do przechowywanego obiektu.A constant pointer to the object being stored.

UwagiRemarks

Na przykład nie można serializować dokumentu, ale można serializować elementy, które są częścią dokumentu.For example, you might not serialize a document, but you would serialize the items that are part of the document. Wywoływanie MapObject , zezwalasz na te elementy lub podobiekty, aby odwołać się do dokumentu.By calling MapObject, you allow those items, or subobjects, to reference the document. Ponadto serializowane elementy podelementowe mogą serializować swój m_pDocument wskaźnik wsteczny.Also, serialized subitems can serialize their m_pDocument back pointer.

Możesz wywołać, MapObject gdy zapisujesz i ładujesz CArchive obiekt.You can call MapObject when you store to and load from the CArchive object. MapObject Dodaje określony obiekt do wewnętrznych struktur danych obsługiwanych przez CArchive obiekt podczas serializacji i deserializacji, ale w przeciwieństwie do ReadObject i WriteObjectnie wywołuje serializacji obiektu.MapObject adds the specified object to the internal data structures maintained by the CArchive object during serialization and deserialization, but unlike ReadObject and WriteObject, it does not call serialize on the object.

PrzykładExample

//MyDocument.h
class CMyDocument : public CDocument
{
public:
   DECLARE_SERIAL(CMyDocument)

   CObList m_listOfSubItems;

   virtual void Serialize(CArchive &ar);
};
//MyDocument.cpp
IMPLEMENT_SERIAL(CMyDocument, CDocument, 1)

void CMyDocument::Serialize(CArchive& ar)
{
   CDocument::Serialize(ar);

   if (ar.IsStoring())
   {
      // TODO: add storing code here
   }
   else
   {
      // TODO: add loading code here
   }

   ar.MapObject(this);

   //serialize the subitems in the document;
   //they will be able to serialize their m_pDoc
   //back pointer
   m_listOfSubItems.Serialize(ar);
}
//SubItem.h
class CSubItem : public CObject
{
   DECLARE_SERIAL(CSubItem)
   CSubItem() : m_i(0){};

public:
   CSubItem(CMyDocument *pDoc)
   {
      m_pDoc = pDoc;
   }

   // back pointer to owning document
   CMyDocument *m_pDoc;
   WORD m_i; // other item data

   virtual void Serialize(CArchive &ar);
};
//SubItem.cpp
IMPLEMENT_SERIAL(CSubItem, CObject, 1);

void CSubItem::Serialize(CArchive &ar)

{
   if (ar.IsStoring())
   {
      // will serialize a reference
      // to the "mapped" document pointer
      ar << (CObject *)m_pDoc;
      ar << m_i;
   }
   else
   {
      // Will load a reference to
      // the "mapped" document pointer
      ar >> (CObject *&)m_pDoc;
      ar >> m_i;
   }
}

CArchive:: m_pDocumentCArchive::m_pDocument

Domyślnie ustawiona na wartość NULL, ten wskaźnik do elementu CDocument można ustawić dla wszystkich elementów użytkownika CArchive wystąpienia.Set to NULL by default, this pointer to a CDocument can be set to anything the user of the CArchive instance wants.

CDocument* m_pDocument;

UwagiRemarks

Typowym użyciem tego wskaźnika jest przekazywanie dodatkowych informacji o procesie serializacji do wszystkich obiektów, które są serializowane.A common usage of this pointer is to convey additional information about the serialization process to all objects being serialized. Można to osiągnąć, inicjując wskaźnik przy użyciu dokumentu ( CDocument klasy pochodnej), który jest serializowany w taki sposób, że obiekty w dokumencie mają dostęp do dokumentu, w razie potrzeby.This is achieved by initializing the pointer with the document (a CDocument-derived class) that is being serialized, in such a way that objects within the document can access the document if necessary. Ten wskaźnik jest również używany przez COleClientItem obiekty podczas serializacji.This pointer is also used by COleClientItem objects during serialization.

Struktura ustawia m_pDocument do dokumentu, który jest serializowany, gdy użytkownik wystawia plik Otwórz lub Zapisz.The framework sets m_pDocument to the document being serialized when a user issues a File Open or Save command. W przypadku serializacji dokumentu kontenera łączącego i osadzania (OLE) z przyczyn innych niż otwieranie lub zapisywanie pliku należy jawnie ustawić m_pDocument.If you serialize an Object Linking and Embedding (OLE) container document for reasons other than File Open or Save, you must explicitly set m_pDocument. Na przykład, można to zrobić podczas serializacji dokumentu kontenera do Schowka.For example, you would do this when serializing a container document to the Clipboard.

PrzykładExample

CFile myFile(_T("My__test__file.dat"),
             CFile::modeCreate | CFile::modeWrite);
CArchive ar(&myFile, CArchive::store);
CMyDocument mydoc;
ar.m_pDocument = &mydoc;

// Serialize the document to the archive.
if (ar.m_pDocument != NULL)
   ar.m_pDocument->Serialize(ar);

CArchive:: operator <<CArchive::operator <<

Zapisuje wskazany obiekt lub typ pierwotny do archiwum.Stores the indicated object or primitive type to the archive.

friend CArchive& operator<<(
    CArchive& ar,
    const CObject* pOb);

throw(
    CArchiveException*,
    CFileException*);

CArchive& AFXAPI operator<<(
    CArchive& ar,
    const RECT& rect);

CArchive& AFXAPI operator<<(
    CArchive& ar,
    POINT point);

CArchive& AFXAPI operator<<(
    CArchive& ar,
    SIZE size);

template<typename BaseType,
    class StringTraits> CArchive& operator<<(
    const ATL::CStringT<BaseType,
    StringTraits>& str);

CArchive& operator<<(BYTE by);
CArchive& operator<<(WORD w);
CArchive& operator<<(LONG l);
CArchive& operator<<(DWORD dw);
CArchive& operator<<(float f);
CArchive& operator<<(double d);
CArchive& operator<<(int i);
CArchive& operator<<(short w);
CArchive& operator<<(char ch);
CArchive& operator<<(wchar_t ch);
CArchive& operator<<(unsigned u);
CArchive& operator<<(bool b);
CArchive& operator<<(ULONGLONG dwdw);
CArchive& operator<<(LONGLONG dwdw);

Wartość zwracanaReturn Value

CArchiveOdwołanie, które umożliwia wielokrotne operatory wstawiania w pojedynczym wierszu.A CArchive reference that enables multiple insertion operators on a single line.

UwagiRemarks

Ostatnie dwie wersje zostały zaprojektowane z myślą o przechowywaniu 64-bitowych liczb całkowitych.The last two versions above are specifically for storing 64-bit integers.

Jeśli użyto makra IMPLEMENT_SERIAL w implementacji klasy, operator wstawiania przeciążony dla CObject wywołań chronionych WriteObject .If you used the IMPLEMENT_SERIAL macro in your class implementation, then the insertion operator overloaded for CObject calls the protected WriteObject. Ta funkcja z kolei wywołuje Serialize funkcję klasy.This function, in turn, calls the Serialize function of the class.

Operator wstawiania CStringT (<<) obsługuje zrzucanie diagnostyczne i przechowywanie w archiwum.The CStringT insertion operator (<<) supports diagnostic dumping and storing to an archive.

PrzykładExample

Ten przykład ilustruje użycie CArchive operatora wstawiania << z int long typami i.This example demonstrates the use of the CArchive insertion operator << with the int and long types.

long l = 5;
int i = 10;
if (ar.IsStoring())
   ar << l << i;

PrzykładExample

Ten przykład 2 ilustruje użycie CArchive operatora wstawiania << z CStringT typem.This example 2 demonstrates the use of the CArchive insertion operator << with the CStringT type.

CString s("abc");
ar << s; // Prints the value (abc)

CArchive:: operator >>CArchive::operator >>

Ładuje wskazany obiekt lub typ pierwotny z archiwum.Loads the indicated object or primitive type from the archive.

friend CArchive& operator>>(
    CArchive& ar,
    CObject *& pOb);

throw(
    CArchiveException*,
    CFileException*,
    CMemoryException*);

friend CArchive& operator>>(
    CArchive& ar,
    const CObject *& pOb);

throw(
    CArchiveException*,
    CFileException*,
    CMemoryException*);

CArchive& AFXAPI operator>>(
    CArchive& ar,
    const RECT& rect);

CArchive& AFXAPI operator>>(
    CArchive& ar,
    POINT point);

CArchive& AFXAPI operator>>(
    CArchive& ar,
    SIZE size);

template<typename BaseType,
    class StringTraits> CArchive& operator>>(
    ATL::CStringT<BaseType,
    StringTraits>& str);

CArchive& operator>>(BYTE& by);
CArchive& operator>>(WORD& w);
CArchive& operator>>(int& i);
CArchive& operator>>(LONG& l);
CArchive& operator>>(DWORD& dw);
CArchive& operator>>(float& f);
CArchive& operator>>(double& d);
CArchive& operator>>(short& w);
CArchive& operator>>(char& ch);
CArchive& operator>>(wchar_t& ch);
CArchive& operator>>(unsigned& u);
CArchive& operator>>(bool& b);
CArchive& operator>>(ULONGLONG& dwdw);
CArchive& operator>>(LONGLONG& dwdw);

Wartość zwracanaReturn Value

CArchiveOdwołanie, które umożliwia wielokrotne operatory wyodrębniania w jednym wierszu.A CArchive reference that enables multiple extraction operators on a single line.

UwagiRemarks

Ostatnie dwie wersje zostały przeznaczone do ładowania 64-bitowych liczb całkowitych.The last two versions above are specifically for loading 64-bit integers.

Jeśli w implementacji klasy użyto makra IMPLEMENT_SERIAL, to operatory wyodrębniania przeciążone dla CObject wywołania funkcji chronionej ReadObject (z niezerowym wskaźnikiem klasy czasu wykonywania).If you used the IMPLEMENT_SERIAL macro in your class implementation, then the extraction operators overloaded for CObject call the protected ReadObject function (with a nonzero run-time class pointer). Ta funkcja z kolei wywołuje Serialize funkcję klasy.This function, in turn, calls the Serialize function of the class.

Operator wyodrębniania CStringT (>>) obsługuje ładowanie z archiwum.The CStringT extraction operator (>>) supports loading from an archive.

PrzykładExample

Ten przykład ilustruje użycie CArchive operatora ekstrakcji >> z int typem.This example demonstrates the use of the CArchive extraction operator >> with the int type.

long l;
int i;
if (ar.IsLoading())
   ar >> l >> i;

PrzykładExample

W tym przykładzie pokazano użycie CArchive operatorów wstawiania i wyodrębniania << and >> z CStringT typem.This example demonstrates the use of the CArchive insertion and extraction operators << and >> with the CStringT type.

CString s;
if (ar.IsLoading())
   ar >> s;

CArchive:: ReadCArchive::Read

Odczytuje określoną liczbę bajtów z archiwum.Reads a specified number of bytes from the archive.

UINT Read(void* lpBuf, UINT nMax);

ParametryParameters

lpBuflpBuf
Wskaźnik do buforu dostarczonego przez użytkownika, który ma otrzymywać dane odczytane z archiwum.A pointer to a user-supplied buffer that is to receive the data read from the archive.

Nmaks.nMax
Liczba całkowita bez znaku określająca liczbę bajtów, które mają zostać odczytane z archiwum.An unsigned integer specifying the number of bytes to be read from the archive.

Wartość zwracanaReturn Value

Liczba całkowita bez znaku zawierająca liczbę bajtów, które są faktycznie odczytywane.An unsigned integer containing the number of bytes actually read. Jeśli wartość zwracana jest mniejsza niż żądana liczba, osiągnięto koniec pliku.If the return value is less than the number requested, the end of file has been reached. Nie zgłoszono wyjątku dla stanu końca pliku.No exception is thrown on the end-of-file condition.

UwagiRemarks

Archiwum nie interpretuje bajtów.The archive does not interpret the bytes.

Można używać Read funkcji składowej w ramach Serialize funkcji do odczytywania zwykłych struktur, które są zawarte w obiektach.You can use the Read member function within your Serialize function for reading ordinary structures that are contained in your objects.

PrzykładExample

char pbRead[100];
ar.Read(pbRead, 100);

CArchive:: ReadClassCArchive::ReadClass

Wywołaj tę funkcję elementu członkowskiego, aby odczytać odwołanie do klasy, która została wcześniej zapisana z WriteClass.Call this member function to read a reference to a class previously stored with WriteClass.

CRuntimeClass* ReadClass(
    const CRuntimeClass* pClassRefRequested = NULL,
    UINT* pSchema = NULL,
    DWORD* pObTag = NULL);

ParametryParameters

pClassRefRequestedpClassRefRequested
Wskaźnik do struktury CRuntimeClass , który odnosi się do żądanego odwołania do klasy.A pointer to the CRuntimeClass structure that corresponds to the class reference requested. Może mieć wartość NULL.Can be NULL.

pSchemapSchema
Wskaźnik do schematu klasy czasu wykonywania wcześniej przechowywanej.A pointer to a schema of the run-time class previously stored.

pObTagpObTag
Liczba, która odnosi się do unikatowego tagu obiektu.A number that refers to an object's unique tag. Używane wewnętrznie przez implementację obiektu ReadObject.Used internally by the implementation of ReadObject. Dostępne tylko dla zaawansowanego programowania; pObTag zwykle powinna mieć wartość null.Exposed for advanced programming only; pObTag normally should be NULL.

Wartość zwracanaReturn Value

Wskaźnik do struktury CRuntimeClass .A pointer to the CRuntimeClass structure.

UwagiRemarks

Jeśli pClassRefRequested nie ma wartości null, ReadClass sprawdza, czy zarchiwizowane informacje o klasie są zgodne z klasą środowiska uruchomieniowego.If pClassRefRequested is not NULL, ReadClass verifies that the archived class information is compatible with your runtime class. Jeśli nie jest zgodny, ReadClass program zgłosi CArchiveException.If it is not compatible, ReadClass will throw a CArchiveException.

Klasa środowiska uruchomieniowego musi używać DECLARE_SERIAL i IMPLEMENT_SERIAL; w przeciwnym razie program ReadClass zgłosi CNotSupportedException.Your runtime class must use DECLARE_SERIAL and IMPLEMENT_SERIAL; otherwise, ReadClass will throw a CNotSupportedException.

Jeśli pSchema ma wartość null, schemat przechowywanej klasy można pobrać, wywołując CArchive:: GetObjectSchema; w przeciwnym razie * pSchema będzie zawierać schemat klasy czasu wykonywania, która była wcześniej przechowywana.If pSchema is NULL, the schema of the stored class can be retrieved by calling CArchive::GetObjectSchema; otherwise, *pSchema will contain the schema of the run-time class that was previously stored.

Można użyć SerializeClass zamiast ReadClass , który obsługuje odczytywanie i zapisywanie odwołania do klasy.You can use SerializeClass instead of ReadClass, which handles both reading and writing of the class reference.

PrzykładExample

Zobacz przykład dla CArchive:: WriteClass.See the example for CArchive::WriteClass.

CArchive:: ReadObjectCArchive::ReadObject

Odczytuje dane obiektu z archiwum i konstruuje obiekt odpowiedniego typu.Reads object data from the archive and constructs an object of the appropriate type.

CObject* ReadObject(const CRuntimeClass* pClass);

ParametryParameters

pClasspClass
Stały wskaźnik do struktury CRuntimeClass , który odnosi się do obiektu, który powinien zostać odczytany.A constant pointer to the CRuntimeClass structure that corresponds to the object you expect to read.

Wartość zwracanaReturn Value

Wskaźnik CObject , który musi być bezpiecznie rzutowany do właściwej klasy pochodnej przy użyciu CObject:: IsKindOf.A CObject pointer that must be safely cast to the correct derived class by using CObject::IsKindOf.

UwagiRemarks

Ta funkcja jest zwykle wywoływana przez CArchive operator wyodrębniania ( >> ) przeciążony dla wskaźnika CObject .This function is normally called by the CArchive extraction ( >>) operator overloaded for a CObject pointer. ReadObjectz kolei program wywołuje Serialize funkcję klasy archiwalnej.ReadObject, in turn, calls the Serialize function of the archived class.

W przypadku podania niezerowego parametru pClass , który jest uzyskiwany przez makro RUNTIME_CLASS , funkcja weryfikuje klasę czasu wykonywania zarchiwizowanego obiektu.If you supply a nonzero pClass parameter, which is obtained by the RUNTIME_CLASS macro, then the function verifies the run-time class of the archived object. Przyjęto założenie, że w implementacji klasy użyto makra IMPLEMENT_SERIAL.This assumes you have used the IMPLEMENT_SERIAL macro in the implementation of the class.

PrzykładExample

Zobacz przykład dla CArchive:: WriteObject.See the example for CArchive::WriteObject.

CArchive:: ReadStringCArchive::ReadString

Wywołaj tę funkcję elementu członkowskiego, aby odczytać dane tekstowe do buforu z pliku skojarzonego z CArchive obiektem.Call this member function to read text data into a buffer from the file associated with the CArchive object.

BOOL ReadString(CString& rString);
LPTSTR ReadString(LPTSTR lpsz, UINT nMax);

ParametryParameters

rStringrString
Odwołanie do elementu CString , który będzie zawierać wynikowy ciąg po odczytaniu z pliku skojarzonego z obiektem CArchive.A reference to a CString that will contain the resultant string after it is read from the file associated with the CArchive object.

lpszlpsz
Określa wskaźnik do buforu dostarczonego przez użytkownika, który będzie otrzymywał ciąg tekstowy zakończony wartością null.Specifies a pointer to a user-supplied buffer that will receive a null-terminated text string.

Nmaks.nMax
Określa maksymalną liczbę znaków do odczytania.Specifies the maximum number of characters to read. Wartość musi być mniejsza niż rozmiar buforu lpsz .Should be one less than the size of the lpsz buffer.

Wartość zwracanaReturn Value

W wersji, która zwraca wartość logiczną, prawda, jeśli pomyślne; W przeciwnym razie zwraca wartość FALSE.In the version that returns BOOL, TRUE if successful; FALSE otherwise.

W wersji, która zwraca LPTSTR , wskaźnik do buforu zawierającego dane tekstowe; Wartość NULL, jeśli osiągnięto koniec pliku.In the version that returns an LPTSTR, a pointer to the buffer containing the text data; NULL if end-of-file was reached.

UwagiRemarks

W wersji funkcji składowej z parametrem nmaks. długość buforu będzie ograniczona do nmaks. -1 znaków.In the version of the member function with the nMax parameter, the buffer will hold up to a limit of nMax - 1 characters. Odczyt został zatrzymany przez parę wysuwu wiersza powrotu karetki.Reading is stopped by a carriage return-line feed pair. Końcowe znaki nowego wiersza są zawsze usuwane.Trailing newline characters are always removed. W obu przypadkach dołączany jest znak null (' \ 0 ').A null character ('\0') is appended in either case.

CArchive:: Read jest również dostępna dla danych wejściowych w trybie tekstowym, ale nie kończy się na parze wysuwu wiersza powrotu karetki.CArchive::Read is also available for text-mode input, but it does not terminate on a carriage return-line feed pair.

PrzykładExample

Zobacz przykład dla CArchive:: WriteString.See the example for CArchive::WriteString.

CArchive:: SerializeClassCArchive::SerializeClass

Wywołaj tę funkcję elementu członkowskiego, jeśli chcesz przechowywać i ładować informacje o wersji klasy bazowej.Call this member function when you want to store and load the version information of a base class.

void SerializeClass(const CRuntimeClass* pClassRef);

ParametryParameters

pClassRefpClassRef
Wskaźnik do obiektu klasy czasu wykonywania dla klasy bazowej.A pointer to a run-time class object for the base class.

UwagiRemarks

SerializeClass odczytuje lub zapisuje odwołanie do klasy do CArchive obiektu, w zależności od kierunku CArchive .SerializeClass reads or writes the reference to a class to the CArchive object, depending on the direction of the CArchive. Użyj zamiast SerializeClass ReadClass i WriteClass jako wygodnego sposobu serializacji obiektów klasy podstawowej; SerializeClass wymaga mniej kodu i mniejszej liczby parametrów.Use SerializeClass in place of ReadClass and WriteClass as a convenient way to serialize base-class objects; SerializeClass requires less code and fewer parameters.

ReadClassNa przykład SerializeClass sprawdza, czy zarchiwizowane informacje o klasie są zgodne z klasą środowiska uruchomieniowego.Like ReadClass, SerializeClass verifies that the archived class information is compatible with your runtime class. Jeśli nie jest zgodny, SerializeClass program zgłosi CArchiveException.If it is not compatible, SerializeClass will throw a CArchiveException.

Klasa środowiska uruchomieniowego musi używać DECLARE_SERIAL i IMPLEMENT_SERIAL; w przeciwnym razie program SerializeClass zgłosi CNotSupportedException.Your runtime class must use DECLARE_SERIAL and IMPLEMENT_SERIAL; otherwise, SerializeClass will throw a CNotSupportedException.

Użyj makra RUNTIME_CLASS , aby pobrać wartość parametru pRuntimeClass .Use the RUNTIME_CLASS macro to retrieve the value for the pRuntimeClass parameter. Klasa bazowa musi używać makra IMPLEMENT_SERIAL .The base class must have used the IMPLEMENT_SERIAL macro.

PrzykładExample

class CBaseClass : public CObject
{
   DECLARE_SERIAL(CBaseClass);
};
class CDerivedClass : public CBaseClass
{
public:
   virtual void Serialize(CArchive &ar);
};
void CDerivedClass::Serialize(CArchive &ar)
{
   if (ar.IsStoring())
   {
      //normal code for storing contents
      //of this object
   }
   else
   {
      //normal code for reading contents
      //of this object
   }

   //allow the base class to serialize along
   //with its version information
   ar.SerializeClass(RUNTIME_CLASS(CBaseClass));
   CBaseClass::Serialize(ar);
}

CArchive:: SetLoadParamsCArchive::SetLoadParams

Wywołaj SetLoadParams , gdy zamierzasz odczytać dużą liczbę CObject obiektów pochodnych z archiwum.Call SetLoadParams when you are going to read a large number of CObject-derived objects from an archive.

void SetLoadParams(UINT nGrowBy = 1024);

ParametryParameters

nGrowBynGrowBy
Minimalna liczba gniazd elementów do przydzielenia w przypadku konieczności zwiększenia rozmiaru.The minimum number of element slots to allocate if a size increase is necessary.

UwagiRemarks

CArchive używa tablicy obciążenia do rozpoznawania odwołań do obiektów przechowywanych w archiwum.CArchive uses a load array to resolve references to objects stored in the archive. SetLoadParams umożliwia ustawienie rozmiaru, do którego zostanie powiększona tablica obciążenia.SetLoadParams allows you to set the size to which the load array grows.

Nie należy wywoływać SetLoadParams po załadowaniu jakiegokolwiek obiektu lub po wywołaniu metody MapObject lub ReadObject .You must not call SetLoadParams after any object is loaded, or after MapObject or ReadObject is called.

PrzykładExample

class CMyLargeDocument : public CDocument
{
public:
   virtual void Serialize(CArchive &ar);
};
void CMyLargeDocument::Serialize(CArchive &ar)
{
   if (ar.IsStoring())
      ar.SetStoreParams(); // use large defaults
   else
      ar.SetLoadParams();

   if (ar.IsStoring())
   {
      // code for storing CMyLargeDocument
   }
   else
   {
      // code for loading CMyLargeDocument
   }
}

CArchive:: SetObjectSchemaCArchive::SetObjectSchema

Wywołaj tę funkcję elementu członkowskiego, aby ustawić schemat obiektu przechowywany w obiekcie archiwum do nSchema.Call this member function to set the object schema stored in the archive object to nSchema.

void SetObjectSchema(UINT nSchema);

ParametryParameters

nSchemanSchema
Określa schemat obiektu.Specifies the object's schema.

UwagiRemarks

Następne wywołanie GetObjectSchema zwróci wartość przechowywaną w nSchema.The next call to GetObjectSchema will return the value stored in nSchema.

Służy SetObjectSchema do zaawansowanej wersji, na przykład w przypadku, gdy chcesz wymusić odczytanie określonej wersji w Serialize funkcji klasy pochodnej.Use SetObjectSchema for advanced versioning; for example, when you want to force a particular version to be read in a Serialize function of a derived class.

PrzykładExample

ar.SetObjectSchema(2);
ASSERT(2 == ar.GetObjectSchema());

CArchive:: SetStoreParamsCArchive::SetStoreParams

Używany SetStoreParams podczas przechowywania dużej liczby CObject obiektów pochodnych w archiwum.Use SetStoreParams when storing a large number of CObject-derived objects in an archive.

void SetStoreParams(UINT nHashSize = 2053, UINT nBlockSize = 128);

ParametryParameters

nHashSizenHashSize
Rozmiar tabeli skrótów dla map wskaźnika interfejsu.The size of the hash table for interface pointer maps. Powinna to być liczba podstawowa.Should be a prime number.

nBlockSizenBlockSize
Określa stopień szczegółowości alokacji pamięci na potrzeby rozszerzania parametrów.Specifies the memory-allocation granularity for extending the parameters. W celu uzyskania najlepszej wydajności powinna być potęgą 2.Should be a power of 2 for the best performance.

UwagiRemarks

SetStoreParams umożliwia ustawienie rozmiaru tabeli skrótu i rozmiaru bloku mapy używanego do identyfikowania unikatowych obiektów podczas procesu serializacji.SetStoreParams allows you to set the hash table size and the block size of the map used to identify unique objects during the serialization process.

Nie należy wywoływać SetStoreParams po zapisaniu obiektów lub po wywołaniu metody MapObject lub WriteObject .You must not call SetStoreParams after any objects are stored, or after MapObject or WriteObject is called.

PrzykładExample

class CMyLargeDocument : public CDocument
{
public:
   virtual void Serialize(CArchive &ar);
};
void CMyLargeDocument::Serialize(CArchive &ar)
{
   if (ar.IsStoring())
      ar.SetStoreParams(); // use large defaults
   else
      ar.SetLoadParams();

   if (ar.IsStoring())
   {
      // code for storing CMyLargeDocument
   }
   else
   {
      // code for loading CMyLargeDocument
   }
}

CArchive:: WriteCArchive::Write

Zapisuje określoną liczbę bajtów do archiwum.Writes a specified number of bytes to the archive.

void Write(const void* lpBuf, INT nMax);

ParametryParameters

lpBuflpBuf
Wskaźnik do buforu dostarczonego przez użytkownika, który zawiera dane, które mają być zapisywane w archiwum.A pointer to a user-supplied buffer that contains the data to be written to the archive.

Nmaks.nMax
Liczba całkowita określająca liczbę bajtów, które mają być zapisywane w archiwum.An integer that specifies the number of bytes to be written to the archive.

UwagiRemarks

Archiwum nie formatuje bajtów.The archive does not format the bytes.

Możesz użyć Write funkcji elementu członkowskiego w Serialize funkcji, aby napisać zwykłe struktury, które są zawarte w obiektach.You can use the Write member function within your Serialize function to write ordinary structures that are contained in your objects.

PrzykładExample

char pbWrite[100];
memset(pbWrite, 'a', 100);
ar.Write(pbWrite, 100);

CArchive:: WriteClassCArchive::WriteClass

Służy WriteClass do przechowywania informacji o wersji i klasie klasy bazowej podczas serializacji klasy pochodnej.Use WriteClass to store the version and class information of a base class during serialization of the derived class.

void WriteClass(const CRuntimeClass* pClassRef);

ParametryParameters

pClassRefpClassRef
Wskaźnik do struktury CRuntimeClass , który odnosi się do żądanego odwołania do klasy.A pointer to the CRuntimeClass structure that corresponds to the class reference requested.

UwagiRemarks

WriteClass zapisuje odwołanie do CRuntimeClass dla klasy bazowej do CArchive .WriteClass writes a reference to the CRuntimeClass for the base class to the CArchive. Użyj CArchive:: ReadClass , aby pobrać odwołanie.Use CArchive::ReadClass to retrieve the reference.

WriteClass sprawdza, czy zarchiwizowane informacje o klasie są zgodne z klasą środowiska uruchomieniowego.WriteClass verifies that the archived class information is compatible with your runtime class. Jeśli nie jest zgodny, WriteClass program zgłosi CArchiveException.If it is not compatible, WriteClass will throw a CArchiveException.

Klasa środowiska uruchomieniowego musi używać DECLARE_SERIAL i IMPLEMENT_SERIAL; w przeciwnym razie program WriteClass zgłosi CNotSupportedException.Your runtime class must use DECLARE_SERIAL and IMPLEMENT_SERIAL; otherwise, WriteClass will throw a CNotSupportedException.

Można użyć SerializeClass zamiast WriteClass , który obsługuje odczytywanie i zapisywanie odwołania do klasy.You can use SerializeClass instead of WriteClass, which handles both reading and writing of the class reference.

PrzykładExample

CFile myFile(_T("My__test__file.dat"),
             CFile::modeCreate | CFile::modeReadWrite);

// Create a storing archive.
CArchive arStore(&myFile, CArchive::store);

// Store the class CAge in the archive.
arStore.WriteClass(RUNTIME_CLASS(CAge));

// Close the storing archive.
arStore.Close();

// Create a loading archive.
myFile.SeekToBegin();
CArchive arLoad(&myFile, CArchive::load);

// Load a class from the archive.
CRuntimeClass *pClass = arLoad.ReadClass();
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CAge)))
{
   arLoad.Abort();
}

CArchive:: WriteObjectCArchive::WriteObject

Przechowuje określony CObject do archiwum.Stores the specified CObject to the archive.

void WriteObject(const CObject* pOb);

ParametryParameters

pObpOb
Stały wskaźnik do przechowywanego obiektu.A constant pointer to the object being stored.

UwagiRemarks

Ta funkcja jest zwykle wywoływana przez CArchive operator wstawiania ( << ) przeciążony dla CObject .This function is normally called by the CArchive insertion ( <<) operator overloaded for CObject. WriteObjectz kolei program wywołuje Serialize funkcję klasy archiwalnej.WriteObject, in turn, calls the Serialize function of the archived class.

Aby włączyć archiwizowanie, należy użyć makra IMPLEMENT_SERIAL.You must use the IMPLEMENT_SERIAL macro to enable archiving. WriteObject zapisuje nazwę klasy ASCII w archiwum.WriteObject writes the ASCII class name to the archive. Ta nazwa klasy jest weryfikowana w dalszej części procesu ładowania.This class name is validated later during the load process. Specjalny schemat kodowania zapobiega niepotrzebnemu duplikowaniu nazwy klasy dla wielu obiektów klasy.A special encoding scheme prevents unnecessary duplication of the class name for multiple objects of the class. Ten schemat uniemożliwia również nadmiarowy magazyn obiektów, które są obiektami docelowymi więcej niż jeden wskaźnik.This scheme also prevents redundant storage of objects that are targets of more than one pointer.

Dokładne metody kodowania obiektów (łącznie z obecnością nazwy klasy ASCII) są szczegółami implementacji i mogą ulec zmianie w przyszłych wersjach biblioteki.The exact object encoding method (including the presence of the ASCII class name) is an implementation detail and could change in future versions of the library.

Uwaga

Zakończ tworzenie, usuwanie i aktualizowanie wszystkich obiektów przed rozpoczęciem ich archiwizowania.Finish creating, deleting, and updating all your objects before you begin to archive them. Archiwum zostanie uszkodzone w przypadku mieszania archiwizacji z modyfikacją obiektu.Your archive will be corrupted if you mix archiving with object modification.

PrzykładExample

Aby zapoznać się z definicją klasy CAge , zobacz przykład dla CObList:: CObList.For a definition of the class CAge, see the example for CObList::CObList.

CFile myFile(_T("My__test__file.dat"),
             CFile::modeCreate | CFile::modeReadWrite);
CAge age(21), *pAge;

// Create a storing archive.
CArchive arStore(&myFile, CArchive::store);

// Write the object to the archive
arStore.WriteObject(&age);

// Close the storing archive
arStore.Close();

// Create a loading archive.
myFile.SeekToBegin();
CArchive arLoad(&myFile, CArchive::load);

// Verify the object is in the archive.
pAge = (CAge *)arLoad.ReadObject(RUNTIME_CLASS(CAge));
ASSERT(age == *pAge);

CArchive:: WriteStringCArchive::WriteString

Użyj tej funkcji elementu członkowskiego, aby zapisać dane z buforu do pliku skojarzonego z CArchive obiektem.Use this member function to write data from a buffer to the file associated with the CArchive object.

void WriteString(LPCTSTR lpsz);

ParametryParameters

lpszlpsz
Określa wskaźnik do buforu zawierającego ciąg tekstowy zakończony znakiem null.Specifies a pointer to a buffer containing a null-terminated text string.

UwagiRemarks

Kończący znak null (' \ 0 ') nie jest zapisywana w pliku; nie jest automatycznie pisany nowy wiersz.The terminating null character ('\0') is not written to the file; nor is a newline automatically written.

WriteString zgłasza wyjątek w odpowiedzi na kilka warunków, w tym dysk — pełen warunek.WriteString throws an exception in response to several conditions, including the disk-full condition.

Write jest również dostępna, ale zamiast kończąc na znaku null, zapisuje żądaną liczbę bajtów do pliku.Write is also available, but rather than terminating on a null character, it writes the requested number of bytes to the file.

PrzykładExample

CFile myFile(_T("My__test__file.dat"),
             CFile::modeCreate | CFile::modeReadWrite);
CString str1("String1"), str2("String2"), str;

// Create a storing archive.
CArchive arStore(&myFile, CArchive::store);

// Write str1 and str2 to the archive
arStore.WriteString(str1);
arStore.WriteString(_T("\n"));
arStore.WriteString(str2);
arStore.WriteString(_T("\n"));

// Close the storing archive
arStore.Close();

// Create a loading archive.
myFile.SeekToBegin();
CArchive arLoad(&myFile, CArchive::load);

// Verify the two strings are in the archive.
arLoad.ReadString(str);
ASSERT(str == str1);
arLoad.ReadString(str);
ASSERT(str == str2);

Zobacz takżeSee also

Wykres hierarchiiHierarchy Chart
Klasa CFileCFile Class
Klasa CObjectCObject Class
Klasa CSocketCSocket Class
Klasa CSocketFileCSocketFile Class