CArchive クラスCArchive Class

を使用すると、オブジェクトの複雑なネットワークを永続的なバイナリ形式 (通常はディスクストレージ) に保存し、それらのオブジェクトが削除された後も保持できます。Allows you to save a complex network of objects in a permanent binary form (usually disk storage) that persists after those objects are deleted.

構文Syntax

class CArchive

メンバーMembers

パブリック コンストラクターPublic Constructors

名前Name 説明Description
CArchive:: CArchiveCArchive::CArchive CArchive オブジェクトを作成します。Creates a CArchive object.

パブリック メソッドPublic Methods

名前Name 説明Description
CArchive:: AbortCArchive::Abort 例外をスローせずにアーカイブを閉じます。Closes an archive without throwing an exception.
CArchive:: CloseCArchive::Close 書き込まれていないデータをフラッシュし、から切断し CFile ます。Flushes unwritten data and disconnects from the CFile.
CArchive:: FlushCArchive::Flush アーカイブバッファーから書き込まれていないデータをフラッシュします。Flushes unwritten data from the archive buffer.
CArchive:: GetFileCArchive::GetFile CFileこのアーカイブのオブジェクトポインターを取得します。Gets the CFile object pointer for this archive.
CArchive:: GetObjectSchemaCArchive::GetObjectSchema Serialize逆シリアル化されているオブジェクトのバージョンを確認するために、関数から呼び出されます。Called from the Serialize function to determine the version of the object that is being deserialized.
CArchive:: IsBufferEmptyCArchive::IsBufferEmpty Windows ソケットの受信プロセス中にバッファーが空になっているかどうかを判断します。Determines whether the buffer has been emptied during a Windows Sockets receive process.
CArchive:: IsLoadingCArchive::IsLoading アーカイブが読み込み中かどうかを判断します。Determines whether the archive is loading.
CArchive:: IsStoringCArchive::IsStoring アーカイブが格納されているかどうかを判断します。Determines whether the archive is storing.
CArchive:: MapObjectCArchive::MapObject ファイルにシリアル化されていないが、サブオブジェクトで参照できるオブジェクトをマップに配置します。Places objects in the map that are not serialized to the file, but that are available for subobjects to reference.
CArchive:: ReadCArchive::Read 生バイトを読み取ります。Reads raw bytes.
CArchive:: ReadClassCArchive::ReadClass 以前にに格納されていたクラス参照を読み取り WriteClass ます。Reads a class reference previously stored with WriteClass.
CArchive:: ReadObjectCArchive::ReadObject オブジェクトの Serialize 読み込み用の関数を呼び出します。Calls an object's Serialize function for loading.
CArchive:: ReadStringCArchive::ReadString 1行のテキストを読み取ります。Reads a single line of text.
CArchive:: SerializeClassCArchive::SerializeClass の方向に応じて、オブジェクトへのクラス参照を読み取りまたは書き込み CArchive CArchive ます。Reads or writes the class reference to the CArchive object depending on the direction of the CArchive.
CArchive:: SetLoadParamsCArchive::SetLoadParams 読み込み配列のサイズを設定します。Sets the size to which the load array grows. オブジェクトが読み込まれる前、またはが呼び出される前に、を呼び出す必要があり MapObject ReadObject ます。Must be called before any object is loaded or before MapObject or ReadObject is called.
CArchive:: SetObjectSchemaCArchive::SetObjectSchema Archive オブジェクトに格納されているオブジェクトスキーマを設定します。Sets the object schema stored in the archive object.
CArchive:: SetStoreParamsCArchive::SetStoreParams シリアル化プロセス中に一意のオブジェクトを識別するために使用されるマップのハッシュテーブルのサイズとブロックサイズを設定します。Sets the hash table size and the block size of the map used to identify unique objects during the serialization process.
CArchive:: WriteCArchive::Write 生のバイトを書き込みます。Writes raw bytes.
CArchive:: WriteClassCArchive::WriteClass への参照をに書き込み CRuntimeClass CArchive ます。Writes a reference to the CRuntimeClass to the CArchive.
CArchive:: WriteObjectCArchive::WriteObject 格納するオブジェクトの Serialize 関数を呼び出します。Calls an object's Serialize function for storing.
CArchive:: WriteStringCArchive::WriteString 1行のテキストを書き込みます。Writes a single line of text.

パブリック演算子Public Operators

名前Name 説明Description
CArchive:: operator <<CArchive::operator << オブジェクトとプリミティブ型をアーカイブに格納します。Stores objects and primitive types to the archive.
CArchive:: operator >>CArchive::operator >> アーカイブからオブジェクトとプリミティブ型を読み込みます。Loads objects and primitive types from the archive.

パブリック データ メンバーPublic Data Members

名前Name 説明Description
CArchive:: m_pDocumentCArchive::m_pDocument

解説Remarks

CArchive に基底クラスがありません。CArchive does not have a base class.

後で永続ストレージからオブジェクトを読み込み、メモリに再作成することができます。Later you can load the objects from persistent storage, reconstituting them in memory. データを永続化するこのプロセスは、"シリアル化" と呼ばれます。This process of making data persistent is called "serialization."

アーカイブオブジェクトは、バイナリストリームの一種と考えることができます。You can think of an archive object as a kind of binary stream. 入力/出力ストリームと同様に、アーカイブはファイルに関連付けられ、バッファーによるデータの書き込みとストレージからのデータの読み取りを許可します。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. 入力/出力ストリームは ASCII 文字のシーケンスを処理しますが、アーカイブでは、バイナリオブジェクトデータを効率的かつ冗長な形式で処理します。An input/output stream processes sequences of ASCII characters, but an archive processes binary object data in an efficient, nonredundant format.

オブジェクトを作成するには、先に CFile オブジェクトを作成する必要があり CArchive ます。You must create a CFile object before you can create a CArchive object. また、アーカイブの読み込み/格納状態が、ファイルのオープンモードと互換性があることを確認する必要があります。In addition, you must ensure that the archive's load/store status is compatible with the file's open mode. ファイルごとにアクティブなアーカイブは1つに制限されています。You are limited to one active archive per file.

オブジェクトを構築するときは CArchiveCFile 開いているファイルを表すクラス (または派生クラス) のオブジェクトにオブジェクトをアタッチします。When you construct a CArchive object, you attach it to an object of class CFile (or a derived class) that represents an open file. また、アーカイブを読み込みまたは保存に使用するかどうかも指定します。You also specify whether the archive will be used for loading or storing. オブジェクトは、 CArchive プリミティブ型だけでなく、シリアル化用にデザインされた CObject派生クラスのオブジェクトも処理できます。A CArchive object can process not only primitive types but also objects of CObject-derived classes designed for serialization. シリアル化可能なクラスには、通常、 Serialize メンバー関数があります。また、「クラス」で説明されているように、通常は DECLARE_SERIALIMPLEMENT_SERIAL マクロを使用し 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.

オーバーロードされた抽出 ( >> ) および挿入 ( << ) 演算子は、プリミティブ型と派生クラスの両方をサポートする便利なアーカイブプログラミングインターフェイスです CObjectThe overloaded extraction ( >>) and insertion ( <<) operators are convenient archive programming interfaces that support both primitive types and CObject-derived classes.

CArchive は、MFC の Windows ソケットクラス CSocketCSocketFileを使用したプログラミングもサポートしています。CArchive also supports programming with the MFC Windows Sockets classes CSocket and CSocketFile. Isbufferemptyメンバー関数は、その使用法をサポートしています。The IsBufferEmpty member function supports that usage.

の詳細につい CArchive ては、「 シリアル化Windows ソケット: アーカイブでのソケットの使用」を参照してください。For more information on CArchive, see the articles Serialization and Windows Sockets: Using Sockets with Archives.

継承階層Inheritance Hierarchy

CArchive

要件Requirements

ヘッダー: afxHeader: afx.h

CArchive:: AbortCArchive::Abort

例外をスローせずにアーカイブを閉じるには、この関数を呼び出します。Call this function to close the archive without throwing an exception.

void Abort ();

解説Remarks

CArchiveデストラクターは通常 Close 、を呼び出します。これにより、関連付けられたオブジェクトに保存されていないすべてのデータがフラッシュされ CFile ます。The CArchive destructor will normally call Close, which will flush any data that has not been saved to the associated CFile object. これにより、例外が発生する可能性があります。This can cause exceptions.

これらの例外をキャッチする場合は、を使用することをお勧めし Abort ます。これにより、オブジェクトを破棄しても CArchive 例外が発生しなくなります。When catching these exceptions, it is a good idea to use Abort, so that destructing the CArchive object doesn't cause further exceptions. 例外を処理する場合、 CArchive::Abort は、 CArchive:: Closeとは異なり、エラーを無視するため、エラー発生時に例外をスローしません AbortWhen handling exceptions, CArchive::Abort will not throw an exception on failures because, unlike CArchive::Close, Abort ignores failures.

new ヒープにオブジェクトを割り当てる場合は CArchive 、ファイルを閉じた後でオブジェクトを削除する必要があります。If you used new to allocate the CArchive object on the heap, then you must delete it after closing the file.

Example

CArchive:: WriteClassの例を参照してください。See the example for CArchive::WriteClass.

CArchive:: CArchiveCArchive::CArchive

オブジェクトを構築し、オブジェクト CArchive の読み込みまたは格納に使用するかどうかを指定します。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);

パラメーターParameters

pFilepFile
CFile永続データの最終的な変換元または転送先であるオブジェクトへのポインター。A pointer to the CFile object that is the ultimate source or destination of the persistent data.

EvaluationmodenMode
オブジェクトがアーカイブから読み込まれるか、アーカイブに格納されるかを指定するフラグ。A flag that specifies whether objects will be loaded from or stored to the archive. Nmode パラメーターには、次のいずれかの値を指定する必要があります。The nMode parameter must have one of the following values:

  • CArchive::load アーカイブからデータを読み込みます。CArchive::load Loads data from the archive. 読み取り権限のみが必要 CFile です。Requires only CFile read permission.

  • CArchive::store アーカイブにデータを保存します。CArchive::store Saves data to the archive. CFile書き込みアクセス許可が必要です。Requires CFile write permission.

  • CArchive::bNoFlushOnDelete アーカイブデストラクターが呼び出されたときに、アーカイブが自動的にを呼び出さないようにし Flush ます。CArchive::bNoFlushOnDelete Prevents the archive from automatically calling Flush when the archive destructor is called. このフラグを設定した場合は、デストラクターが呼び出される前に明示的にを呼び出す必要が Close あります。If you set this flag, you are responsible for explicitly calling Close before the destructor is called. そうしないと、データが破損します。If you do not, your data will be corrupted.

nBufSizenBufSize
内部ファイルバッファーのサイズをバイト単位で指定する整数です。An integer that specifies the size of the internal file buffer, in bytes. 既定のバッファーサイズは4096バイトであることに注意してください。Note that the default buffer size is 4,096 bytes. 大量のオブジェクトを定期的にアーカイブする場合は、ファイルバッファーサイズの倍数である大きなバッファーサイズを使用すると、パフォーマンスが向上します。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
ユーザーが指定し たサイズの バッファーへのポインターです (省略可能)。An optional pointer to a user-supplied buffer of size nBufSize. このパラメーターを指定しない場合、アーカイブによってローカルヒープからバッファーが割り当てられ、オブジェクトが破棄されると解放されます。If you do not specify this parameter, the archive allocates a buffer from the local heap and frees it when the object is destroyed. アーカイブでは、ユーザーが指定したバッファーは解放されません。The archive does not free a user-supplied buffer.

解説Remarks

アーカイブを作成した後で、この仕様を変更することはできません。You cannot change this specification after you have created the archive.

アーカイブを閉じるまで、操作を使用して CFile ファイルの状態を変更することはできません。You may not use CFile operations to alter the state of the file until you have closed the archive. このような操作を行うと、アーカイブの整合性が損なわれます。Any such operation will damage the integrity of the archive. シリアル化中にファイルポインターの位置にアクセスするには、アーカイブのファイルオブジェクトを GetFile メンバー関数から取得してから、 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. ファイルポインターの位置を取得する前に、 CArchive:: Flush を呼び出す必要があります。You should call CArchive::Flush before obtaining the position of the file pointer.

Example

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

バッファーに残っているすべてのデータをフラッシュし、アーカイブを閉じ、ファイルからアーカイブを切断します。Flushes any data remaining in the buffer, closes the archive, and disconnects the archive from the file.

void Close();

解説Remarks

アーカイブに対するそれ以上の操作は許可されていません。No further operations on the archive are permitted. アーカイブを閉じた後、同じファイルに対して別のアーカイブを作成するか、ファイルを閉じることができます。After you close an archive, you can create another archive for the same file or you can close the file.

このメンバー関数は、 Close すべてのデータがアーカイブからファイルに転送されるようにします。これにより、アーカイブを使用できなくなります。The member function Close ensures that all data is transferred from the archive to the file, and it makes the archive unavailable. ファイルからストレージメディアへの転送を完了するには、最初に CFile:: Close を使用し、次にオブジェクトを破棄する必要があり CFile ます。To complete the transfer from the file to the storage medium, you must first use CFile::Close and then destroy the CFile object.

Example

CArchive:: WriteStringの例を参照してください。See the example for CArchive::WriteString.

CArchive:: FlushCArchive::Flush

アーカイブバッファー内の残りのデータを強制的にファイルに書き込みます。Forces any data remaining in the archive buffer to be written to the file.

void Flush();

解説Remarks

このメンバー関数は、 Flush すべてのデータがアーカイブからファイルに確実に転送されるようにします。The member function Flush ensures that all data is transferred from the archive to the file. ファイルからストレージメディアへの転送を完了するには、 CFile:: Close を呼び出す必要があります。You must call CFile::Close to complete the transfer from the file to the storage medium.

Example

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

CFileこのアーカイブのオブジェクトポインターを取得します。Gets the CFile object pointer for this archive.

CFile* GetFile() const;

戻り値Return Value

使用されているオブジェクトへの定数ポインター CFileA constant pointer to the CFile object in use.

解説Remarks

を使用する前に、アーカイブをフラッシュする必要があり GetFile ます。You must flush the archive before using GetFile.

Example

const CFile *fp = ar.GetFile();

CArchive:: GetObjectSchemaCArchive::GetObjectSchema

関数からこの関数を呼び出して、 Serialize 現在逆シリアル化されているオブジェクトのバージョンを確認します。Call this function from the Serialize function to determine the version of the object that is currently being deserialized.

UINT GetObjectSchema();

戻り値Return Value

逆シリアル化中に、読み取るオブジェクトのバージョン。During deserialization, the version of the object being read.

解説Remarks

この関数の呼び出しは、 CArchive オブジェクトが読み込まれている場合にのみ有効です ( CArchive:: isloading は0以外の値を返します)。Calling this function is only valid when the CArchive object is being loaded ( CArchive::IsLoading returns nonzero). これは関数の最初の呼び出しである必要があり、 Serialize 1 回だけ呼び出されます。It should be the first call in the Serialize function and called only once. 戻り値 (UINT)-1 は、バージョン番号が不明であることを示します。A return value of ( UINT)-1 indicates that the version number is unknown.

派生クラスでは、 CObject (ビットごとの or を使用して) VERSIONABLE_SCHEMA をスキーマバージョン自体 (IMPLEMENT_SERIAL マクロ) と組み合わせて使用して、"バージョン管理可能オブジェクト" を作成することができます。これは、 Serialize メンバー関数が複数のバージョンを読み取ることができるオブジェクトです。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. 既定のフレームワーク機能 (VERSIONABLE_SCHEMA なし) は、バージョンが一致しない場合に例外をスローすることです。The default framework functionality (without VERSIONABLE_SCHEMA) is to throw an exception when the version is mismatched.

Example

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

このメンバー関数を呼び出して、archive オブジェクトの内部バッファーが空であるかどうかを確認します。Call this member function to determine whether the archive object's internal buffer is empty.

BOOL IsBufferEmpty() const;

戻り値Return Value

アーカイブのバッファーが空の場合は0以外の。それ以外の場合は0です。Nonzero if the archive's buffer is empty; otherwise 0.

解説Remarks

この関数は、MFC Windows Sockets クラスを使用したプログラミングをサポートするために用意されてい CSocketFile ます。This function is supplied to support programming with the MFC Windows Sockets class CSocketFile. オブジェクトに関連付けられたアーカイブには、このファイルを使用する必要はありません CFileYou do not need to use it for an archive associated with a CFile object.

IsBufferEmpty オブジェクトに関連付けられたアーカイブで使用するの CSocketFile は、アーカイブのバッファーに複数のメッセージまたはレコードが含まれている可能性があるためです。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. 1つのメッセージを受信した後、を使用し IsBufferEmpty て、バッファーが空になるまでデータの受信を継続するループを制御する必要があります。After receiving one message, you should use IsBufferEmpty to control a loop that continues receiving data until the buffer is empty. 詳細については、「クラスの Receive メンバー関数」を参照してください。これは、の CAsyncSocket 使用方法を示して IsBufferEmpty います。For more information, see the Receive member function of class CAsyncSocket, which shows how to use IsBufferEmpty.

詳細については、「 Windows ソケット: アーカイブでのソケットの使用」を参照してください。For more information, see Windows Sockets: Using Sockets with Archives.

CArchive:: IsLoadingCArchive::IsLoading

アーカイブがデータを読み込んでいるかどうかを判断します。Determines whether the archive is loading data.

BOOL IsLoading() const;

戻り値Return Value

アーカイブが現在読み込みに使用されている場合は0以外の。それ以外の場合は0です。Nonzero if the archive is currently being used for loading; otherwise 0.

解説Remarks

このメンバー関数は、アーカイブされたクラスの関数によって呼び出され Serialize ます。This member function is called by the Serialize functions of the archived classes.

Example

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

CArchive:: IsStoringCArchive::IsStoring

アーカイブがデータを格納しているかどうかを判断します。Determines whether the archive is storing data.

BOOL IsStoring() const;

戻り値Return Value

アーカイブが現在使用されている場合は0以外の。それ以外の場合は0です。Nonzero if the archive is currently being used for storing; otherwise 0.

解説Remarks

このメンバー関数は、アーカイブされたクラスの関数によって呼び出され Serialize ます。This member function is called by the Serialize functions of the archived classes.

IsStoringアーカイブの状態が0以外の場合、その状態 IsLoading は0になり、その逆も同様になります。If the IsStoring status of an archive is nonzero, then its IsLoading status is 0, and vice versa.

Example

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

CArchive:: MapObjectCArchive::MapObject

このメンバー関数を呼び出して、実際にはファイルにシリアル化されていないが、サブオブジェクトで参照できるオブジェクトをマップに配置します。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);

パラメーターParameters

pObpOb
格納されているオブジェクトへの定数ポインター。A constant pointer to the object being stored.

解説Remarks

たとえば、ドキュメントをシリアル化することはできませんが、ドキュメントに含まれる項目をシリアル化することになります。For example, you might not serialize a document, but you would serialize the items that are part of the document. を呼び出すことにより、 MapObject これらの項目 (サブオブジェクト) がドキュメントを参照できるようになります。By calling MapObject, you allow those items, or subobjects, to reference the document. また、シリアル化されたサブ項目は m_pDocument バックポインターをシリアル化できます。Also, serialized subitems can serialize their m_pDocument back pointer.

MapObjectオブジェクトに対してを格納して読み込むときに、を呼び出すことができ CArchive ます。You can call MapObject when you store to and load from the CArchive object. MapObject シリアル化および逆シリアル化の間に、オブジェクトによって保持される内部データ構造に、指定されたオブジェクトを追加し CArchive ます。ただし、 ReadObjectWriteObjectとは異なり、オブジェクトで serialize を呼び出しません。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.

Example

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

既定では NULL に設定されています。へのこのポインターは、 CDocument インスタンスのユーザーが必要とする任意のものに設定でき CArchive ます。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;

解説Remarks

このポインターの一般的な使用方法は、シリアル化プロセスに関する追加情報をシリアル化するすべてのオブジェクトに伝達することです。A common usage of this pointer is to convey additional information about the serialization process to all objects being serialized. これは、ドキュメント内のオブジェクトが必要に応じ CDocument てドキュメントにアクセスできるように、シリアル化されているドキュメント (派生クラス) を使用してポインターを初期化することで実現されます。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. このポインターは、 COleClientItem シリアル化中にオブジェクトによっても使用されます。This pointer is also used by COleClientItem objects during serialization.

フレームワークは、ユーザーが File Open または Save コマンドを発行したときに、シリアル化されるドキュメントに m_pDocument を設定します。The framework sets m_pDocument to the document being serialized when a user issues a File Open or Save command. オブジェクトのリンクと埋め込み (OLE) コンテナードキュメントを、File Open または Save 以外の理由でシリアル化する場合は、 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. たとえば、コンテナードキュメントをクリップボードにシリアル化するときに、この操作を行います。For example, you would do this when serializing a container document to the Clipboard.

Example

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

指定されたオブジェクトまたはプリミティブ型をアーカイブに格納します。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);

戻り値Return Value

CArchive1 行に複数の挿入演算子を使用できるようにする参照。A CArchive reference that enables multiple insertion operators on a single line.

解説Remarks

上記の最後の2つのバージョンは、64ビットの整数を格納するためのものです。The last two versions above are specifically for storing 64-bit integers.

クラスの実装で IMPLEMENT_SERIAL マクロを使用した場合、に対してオーバーロードされた挿入演算子は CObject プロテクトを呼び出し WriteObject ます。If you used the IMPLEMENT_SERIAL macro in your class implementation, then the insertion operator overloaded for CObject calls the protected WriteObject. 次に、この関数は Serialize クラスの関数を呼び出します。This function, in turn, calls the Serialize function of the class.

CStringT挿入演算子 (<<) は、診断ダンプをサポートし、アーカイブに保存します。The CStringT insertion operator (<<) supports diagnostic dumping and storing to an archive.

Example

この例では、 CArchive 挿入演算子 << 型および型と共に使用する方法を示し int long ます。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;

Example

この例2では、 CArchive 挿入演算子 << を型と共に使用する方法を示し CStringT ます。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 >>

指定されたオブジェクトまたはプリミティブ型をアーカイブから読み込みます。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);

戻り値Return Value

CArchive複数の抽出演算子を1行に対して有効にする参照。A CArchive reference that enables multiple extraction operators on a single line.

解説Remarks

上記の最後の2つのバージョンは、64ビットの整数を読み込むためのものです。The last two versions above are specifically for loading 64-bit integers.

クラス実装で IMPLEMENT_SERIAL マクロを使用した場合、に対してオーバーロードされた抽出演算子は、 CObject プロテクト関数を呼び出すためにオーバーロードされ ReadObject ます (0 以外のランタイムクラスポインターが使用されます)。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). 次に、この関数は Serialize クラスの関数を呼び出します。This function, in turn, calls the Serialize function of the class.

CStringT抽出演算子 (>>) では、アーカイブからの読み込みがサポートされています。The CStringT extraction operator (>>) supports loading from an archive.

Example

この例では、 CArchive 抽出演算子 >> を型と共に使用する方法を示し int ます。This example demonstrates the use of the CArchive extraction operator >> with the int type.

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

Example

この例では、挿入演算子と抽出演算子を使用して、 CArchive 型を> <を示し < and > CStringT ます。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

アーカイブから指定されたバイト数を読み取ります。Reads a specified number of bytes from the archive.

UINT Read(void* lpBuf, UINT nMax);

パラメーターParameters

lpBuflpBuf
アーカイブから読み取ったデータを受信するユーザー指定のバッファーへのポインター。A pointer to a user-supplied buffer that is to receive the data read from the archive.

N1 日nMax
アーカイブから読み取るバイト数を指定する符号なし整数。An unsigned integer specifying the number of bytes to be read from the archive.

戻り値Return Value

実際に読み取られたバイト数を格納している符号なし整数。An unsigned integer containing the number of bytes actually read. 戻り値が要求された数より小さい場合は、ファイルの末尾に達しています。If the return value is less than the number requested, the end of file has been reached. ファイルの終わりの条件では、例外はスローされません。No exception is thrown on the end-of-file condition.

解説Remarks

アーカイブでは、バイトは解釈されません。The archive does not interpret the bytes.

関数内でメンバー関数を使用すると、 Read Serialize オブジェクトに格納されている通常の構造体を読み取ることができます。You can use the Read member function within your Serialize function for reading ordinary structures that are contained in your objects.

Example

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

CArchive:: ReadClassCArchive::ReadClass

このメンバー関数を呼び出して、以前に 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);

パラメーターParameters

pClassRefRequestedpClassRefRequested
要求されたクラス参照に対応する CRuntimeClass 構造体へのポインター。A pointer to the CRuntimeClass structure that corresponds to the class reference requested. NULL にすることができます。Can be NULL.

pSchemapSchema
以前に格納されていたランタイムクラスのスキーマへのポインター。A pointer to a schema of the run-time class previously stored.

pObTagpObTag
オブジェクトの一意のタグを参照する数値。A number that refers to an object's unique tag. ReadObjectの実装によって内部的に使用されます。Used internally by the implementation of ReadObject. 高度なプログラミングのためだけに公開されています。 Pobtag は通常 NULL にする必要があります。Exposed for advanced programming only; pObTag normally should be NULL.

戻り値Return Value

CRuntimeClass構造体へのポインター。A pointer to the CRuntimeClass structure.

解説Remarks

Pclassrefrequested が NULL でない場合は、アーカイブされた ReadClass クラス情報がランタイムクラスと互換性があるかどうかを確認します。If pClassRefRequested is not NULL, ReadClass verifies that the archived class information is compatible with your runtime class. 互換性がない場合、 ReadClassCアーカイブ例外をスローします。If it is not compatible, ReadClass will throw a CArchiveException.

ランタイムクラスは DECLARE_SERIALIMPLEMENT_SERIALを使用する必要があります。それ以外の場合は、 ReadClass CNotSupportedExceptionをスローします。Your runtime class must use DECLARE_SERIAL and IMPLEMENT_SERIAL; otherwise, ReadClass will throw a CNotSupportedException.

Pschema が NULL の場合、格納されているクラスのスキーマは、 CArchive:: getobjectschema; を呼び出すことによって取得できます。それ以外の場合、 * pschema には、以前に格納されていたランタイムクラスのスキーマが格納されます。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.

ReadClass クラス参照の読み取りと書き込みの両方を処理するのではなく、SerializeClass を使用できます。You can use SerializeClass instead of ReadClass, which handles both reading and writing of the class reference.

Example

CArchive:: WriteClassの例を参照してください。See the example for CArchive::WriteClass.

CArchive:: ReadObjectCArchive::ReadObject

アーカイブからオブジェクトデータを読み取り、適切な型のオブジェクトを構築します。Reads object data from the archive and constructs an object of the appropriate type.

CObject* ReadObject(const CRuntimeClass* pClass);

パラメーターParameters

pClasspClass
読み取ることが想定されているオブジェクトに対応する CRuntimeClass 構造体への定数ポインター。A constant pointer to the CRuntimeClass structure that corresponds to the object you expect to read.

戻り値Return Value

Cobject :: IsKindOfを使用して、正しい派生クラスに安全にキャストする必要があるcobjectポインター。A CObject pointer that must be safely cast to the correct derived class by using CObject::IsKindOf.

解説Remarks

通常、この関数は、 CArchive >> CObject ポインターに対してオーバーロードされた抽出 () 演算子によって呼び出されます。This function is normally called by the CArchive extraction ( >>) operator overloaded for a CObject pointer. ReadObjectさらに、はアーカイブされた Serialize クラスの関数を呼び出します。ReadObject, in turn, calls the Serialize function of the archived class.

RUNTIME_CLASSマクロによって取得される0以外の pClass パラメーターを指定すると、関数はアーカイブされたオブジェクトのランタイムクラスを検証します。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. これは、クラスの実装で IMPLEMENT_SERIAL マクロを使用したことを前提としています。This assumes you have used the IMPLEMENT_SERIAL macro in the implementation of the class.

Example

CArchive:: WriteObjectの例を参照してください。See the example for CArchive::WriteObject.

CArchive:: ReadStringCArchive::ReadString

このメンバー関数を呼び出して、オブジェクトに関連付けられているファイルからテキストデータをバッファーに読み込み CArchive ます。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);

パラメーターParameters

rStringrString
CArchive オブジェクトに関連付けられたファイルから読み取られた後に、結果の文字列が格納される CString への参照。A reference to a CString that will contain the resultant string after it is read from the file associated with the CArchive object.

lpszlpsz
Null で終わるテキスト文字列を受け取るユーザー指定のバッファーへのポインターを指定します。Specifies a pointer to a user-supplied buffer that will receive a null-terminated text string.

N1 日nMax
読み取る最大文字数を指定します。Specifies the maximum number of characters to read. は、 lpsz バッファーのサイズより1小さい値にする必要があります。Should be one less than the size of the lpsz buffer.

戻り値Return Value

BOOL を返すバージョンでは、成功した場合は TRUE になります。それ以外の場合は FALSE。In the version that returns BOOL, TRUE if successful; FALSE otherwise.

を返すバージョンでは LPTSTR 、テキストデータを格納しているバッファーへのポインター。ファイルの終わりに達した場合は NULL です。In the version that returns an LPTSTR, a pointer to the buffer containing the text data; NULL if end-of-file was reached.

解説Remarks

N1 日 パラメーターが指定されたメンバー関数のバージョンでは、バッファーは n1 日 文字の上限まで保持します。In the version of the member function with the nMax parameter, the buffer will hold up to a limit of nMax - 1 characters. 読み取りは、復帰とラインフィードのペアによって停止されます。Reading is stopped by a carriage return-line feed pair. 末尾の改行文字は常に削除されます。Trailing newline characters are always removed. どちらの場合も、null 文字 (' \ 0 ') が追加されます。A null character ('\0') is appended in either case.

CArchive:: Read は、テキストモード入力でも使用できますが、復帰とラインフィードのペアで終了することはありません。CArchive::Read is also available for text-mode input, but it does not terminate on a carriage return-line feed pair.

Example

CArchive:: WriteStringの例を参照してください。See the example for CArchive::WriteString.

CArchive:: SerializeClassCArchive::SerializeClass

基底クラスのバージョン情報を格納して読み込む場合は、このメンバー関数を呼び出します。Call this member function when you want to store and load the version information of a base class.

void SerializeClass(const CRuntimeClass* pClassRef);

パラメーターParameters

pClassRefpClassRef
基底クラスのランタイムクラスオブジェクトへのポインター。A pointer to a run-time class object for the base class.

解説Remarks

SerializeClass の方向に応じて、クラスへの参照をオブジェクトに対して読み取りまたは書き込み CArchive CArchive ます。SerializeClass reads or writes the reference to a class to the CArchive object, depending on the direction of the CArchive. SerializeClass基底クラスのオブジェクトをシリアル化するための便利な方法として、 Readclasswriteclassの代わりにを使用します。には SerializeClass 、より少ないコードが必要です。Use SerializeClass in place of ReadClass and WriteClass as a convenient way to serialize base-class objects; SerializeClass requires less code and fewer parameters.

と同様 ReadClass に、 SerializeClass アーカイブされたクラス情報がランタイムクラスと互換性があることを確認します。Like ReadClass, SerializeClass verifies that the archived class information is compatible with your runtime class. 互換性がない場合、 SerializeClassCアーカイブ例外をスローします。If it is not compatible, SerializeClass will throw a CArchiveException.

ランタイムクラスは DECLARE_SERIALIMPLEMENT_SERIALを使用する必要があります。それ以外の場合は、 SerializeClass CNotSupportedExceptionをスローします。Your runtime class must use DECLARE_SERIAL and IMPLEMENT_SERIAL; otherwise, SerializeClass will throw a CNotSupportedException.

RUNTIME_CLASSマクロを使用して、 pRuntimeClass パラメーターの値を取得します。Use the RUNTIME_CLASS macro to retrieve the value for the pRuntimeClass parameter. 基本クラスでは、 IMPLEMENT_SERIAL マクロを使用する必要があります。The base class must have used the IMPLEMENT_SERIAL macro.

Example

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

SetLoadParams多数のから派生したオブジェクトをアーカイブから読み取るときに、を呼び出し CObject ます。Call SetLoadParams when you are going to read a large number of CObject-derived objects from an archive.

void SetLoadParams(UINT nGrowBy = 1024);

パラメーターParameters

nGrowBynGrowBy
サイズの増加が必要な場合に割り当てる要素スロットの最小数。The minimum number of element slots to allocate if a size increase is necessary.

解説Remarks

CArchive は、load 配列を使用して、アーカイブに格納されているオブジェクトへの参照を解決します。CArchive uses a load array to resolve references to objects stored in the archive. SetLoadParams 読み込む配列のサイズを設定できます。SetLoadParams allows you to set the size to which the load array grows.

SetLoadParamsオブジェクトが読み込まれた後、またはmapobjectまたはReadObjectが呼び出された後にを呼び出すことはできません。You must not call SetLoadParams after any object is loaded, or after MapObject or ReadObject is called.

Example

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

Archive オブジェクトに格納されているオブジェクトスキーマを Nschema に設定するには、このメンバー関数を呼び出します。Call this member function to set the object schema stored in the archive object to nSchema.

void SetObjectSchema(UINT nSchema);

パラメーターParameters

nSchemanSchema
オブジェクトのスキーマを指定します。Specifies the object's schema.

解説Remarks

次に Getobjectschema を呼び出すと、 nschema に格納されている値が返されます。The next call to GetObjectSchema will return the value stored in nSchema.

高度なバージョン管理のために使用します。 SetObjectSchema たとえば、派生クラスの関数で特定のバージョンを強制的に読み取る場合など Serialize です。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.

Example

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

CArchive:: SetStoreParamsCArchive::SetStoreParams

SetStoreParams多数の CObject から派生したオブジェクトをアーカイブに格納する場合は、を使用します。Use SetStoreParams when storing a large number of CObject-derived objects in an archive.

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

パラメーターParameters

nHashSizenHashSize
インターフェイスポインターマップのハッシュテーブルのサイズ。The size of the hash table for interface pointer maps. は素数である必要があります。Should be a prime number.

nBlockSizenBlockSize
パラメーターを拡張するためのメモリ割り当ての粒度を指定します。Specifies the memory-allocation granularity for extending the parameters. 最高のパフォーマンスを得るには、2の累乗である必要があります。Should be a power of 2 for the best performance.

解説Remarks

SetStoreParams では、シリアル化プロセス中に一意のオブジェクトを識別するために使用されるマップのハッシュテーブルサイズとブロックサイズを設定できます。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.

SetStoreParamsオブジェクトが格納された後、またはmapobjectまたはWriteObjectが呼び出された後にを呼び出すことはできません。You must not call SetStoreParams after any objects are stored, or after MapObject or WriteObject is called.

Example

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

指定されたバイト数をアーカイブに書き込みます。Writes a specified number of bytes to the archive.

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

パラメーターParameters

lpBuflpBuf
アーカイブに書き込まれるデータを格納する、ユーザーが指定したバッファーへのポインター。A pointer to a user-supplied buffer that contains the data to be written to the archive.

N1 日nMax
アーカイブに書き込むバイト数を指定する整数。An integer that specifies the number of bytes to be written to the archive.

解説Remarks

アーカイブでは、バイトはフォーマットされません。The archive does not format the bytes.

関数内でメンバー関数を使用すると、 Write Serialize オブジェクトに格納されている通常の構造体を書き込むことができます。You can use the Write member function within your Serialize function to write ordinary structures that are contained in your objects.

Example

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

CArchive:: WriteClassCArchive::WriteClass

WriteClass派生クラスのシリアル化中に、を使用して、基底クラスのバージョンおよびクラス情報を格納します。Use WriteClass to store the version and class information of a base class during serialization of the derived class.

void WriteClass(const CRuntimeClass* pClassRef);

パラメーターParameters

pClassRefpClassRef
要求されたクラス参照に対応する CRuntimeClass 構造体へのポインター。A pointer to the CRuntimeClass structure that corresponds to the class reference requested.

解説Remarks

WriteClass 基底クラスの CRuntimeClass への参照をに書き込み CArchive ます。WriteClass writes a reference to the CRuntimeClass for the base class to the CArchive. 参照を取得するには、 CArchive:: ReadClass を使用します。Use CArchive::ReadClass to retrieve the reference.

WriteClass アーカイブされたクラス情報がランタイムクラスと互換性があることを確認します。WriteClass verifies that the archived class information is compatible with your runtime class. 互換性がない場合、 WriteClassCアーカイブ例外をスローします。If it is not compatible, WriteClass will throw a CArchiveException.

ランタイムクラスは DECLARE_SERIALIMPLEMENT_SERIALを使用する必要があります。それ以外の場合は、 WriteClass CNotSupportedExceptionをスローします。Your runtime class must use DECLARE_SERIAL and IMPLEMENT_SERIAL; otherwise, WriteClass will throw a CNotSupportedException.

WriteClass クラス参照の読み取りと書き込みの両方を処理するのではなく、SerializeClass を使用できます。You can use SerializeClass instead of WriteClass, which handles both reading and writing of the class reference.

Example

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

指定されたを CObject アーカイブに格納します。Stores the specified CObject to the archive.

void WriteObject(const CObject* pOb);

パラメーターParameters

pObpOb
格納されているオブジェクトへの定数ポインター。A constant pointer to the object being stored.

解説Remarks

この関数は、通常、に対してオーバーロードされた CArchive 挿入 () 演算子によって呼び出され << CObject ます。This function is normally called by the CArchive insertion ( <<) operator overloaded for CObject. WriteObjectさらに、はアーカイブされた Serialize クラスの関数を呼び出します。WriteObject, in turn, calls the Serialize function of the archived class.

IMPLEMENT_SERIAL マクロを使用してアーカイブを有効にする必要があります。You must use the IMPLEMENT_SERIAL macro to enable archiving. WriteObject ASCII クラス名をアーカイブに書き込みます。WriteObject writes the ASCII class name to the archive. このクラス名は、読み込み処理中に後で検証されます。This class name is validated later during the load process. 特別なエンコード方式を使用すると、クラスの複数のオブジェクトに対して、不要なクラス名の重複を防ぐことができます。A special encoding scheme prevents unnecessary duplication of the class name for multiple objects of the class. また、このスキームにより、複数のポインターのターゲットであるオブジェクトの冗長ストレージも防止されます。This scheme also prevents redundant storage of objects that are targets of more than one pointer.

厳密なオブジェクトエンコードメソッド (ASCII クラス名の有無を含む) は実装の詳細であり、ライブラリの将来のバージョンで変更される可能性があります。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.

注意

アーカイブを開始する前に、すべてのオブジェクトの作成、削除、および更新を完了します。Finish creating, deleting, and updating all your objects before you begin to archive them. アーカイブとオブジェクトの変更が混在していると、アーカイブが破損します。Your archive will be corrupted if you mix archiving with object modification.

Example

クラスの定義につい CAge ては、「 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

このメンバー関数を使用すると、バッファーからオブジェクトに関連付けられたファイルにデータを書き込むことが CArchive できます。Use this member function to write data from a buffer to the file associated with the CArchive object.

void WriteString(LPCTSTR lpsz);

パラメーターParameters

lpszlpsz
Null で終わるテキスト文字列を格納しているバッファーへのポインターを指定します。Specifies a pointer to a buffer containing a null-terminated text string.

解説Remarks

終端の null 文字 (' \ 0 ') はファイルに書き込まれません。また、改行も自動的に書き込まれません。The terminating null character ('\0') is not written to the file; nor is a newline automatically written.

WriteString では、ディスク全体の条件など、いくつかの条件に応じて例外がスローされます。WriteString throws an exception in response to several conditions, including the disk-full condition.

Write も使用できますが、null 文字で終了するのではなく、要求されたバイト数をファイルに書き込みます。Write is also available, but rather than terminating on a null character, it writes the requested number of bytes to the file.

Example

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

関連項目See also

階層図Hierarchy Chart
CFile クラスCFile Class
CObject クラスCObject Class
CSocket クラスCSocket Class
CSocketFile クラスCSocketFile Class