(B)CArchiveクラスを操作します
クラスオブジェクトをプログラム定義を格納し、読み取り中にバッファデータを読み書きするCArchiveクラス。文書ビューでのプログラミング、そして簡単にデータを読み書き達成することができますようにCListのCARRAYを結合。
(1)基本的には、表示データがCArchiveオブジェクトを読み取る作成します----
使用CArhiveクラスのCFile前にA.は、ファイルオブジェクトでなければならない、とCArchiveのCFile操作が開いた状態にする必要があり、操作はファイルの状態の間に変更されないようにする必要があります。
B.次に、CArchiveオブジェクトを定義したCFileオブジェクトに関連付けし、読み取りまたは書き込みをバッファリングするために使用されるモードを指定します。
CArchive(AR PFILE、//対象のファイルを、のCFileオブジェクトポインタ
nMode、//動作モード、読み取り/書き込み
nBufSize、//バッファのサイズを指定すると、デフォルトは4096です
lpBuf NULLに//バッファポインタデフォルトは、すなわちローカルから自動解除した後、ヒープメモリを削除します
);
C.は、基本データ型の場合は、直接使用することができ、オペレータ>>と<<演算子をデータ読み出しと書き込みのために。これらのデータタイプBYTE、WORD、LONG、DWORD、フロート、ダブル、int型、短い、文字、符号なしのuのように。以下のためのCStringオブジェクトも使用することができます。
カスタムデータ型構造の場合は、私たち自身が次のように一つの例があり、これら二つの演算子をオーバーライドすることができます。
typedef struct test_st
{
float valueX;
float valueY;
//重载<<和>>运算符
friend CArchive& AFXAPI operator <<(CArchive& ar, const test_st& info)
{
//保存
ar<<info.valueX<<info.valueY;
return ar;
}
friend CArchive& AFXAPI operator >>(CArchive& ar, test_st& info)
{
//读取
ar>>info.valueX>>info.valueY;
return ar;
}
}TEST;
D.使用読み取りと書き込みがデータの書き込み/読み取りのためのデータ長を指定することができ、ここではデータ長はバイト数を指します。
使用WriteStringメソッドは、書き込み可能な文字列、ReadStringは、文字のラインを読み出します。これは、ライトラインWriteStringメソッド文字列がないことに注意してください書き込みWriteStringメソッド文字列「\ 0」自動的に「\ N-」と書くされていない場合に書かれていません。ここで私は占いを信じて、MSDNからの例です。
CFile myFile("myfile", 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( "\n" );
arStore.WriteString( str2 );
arStore.WriteString( "\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 );
E. IsLoading IsStoring機能及び読み取り又は書き込みするために使用さが決定されます。
この前切断のCFileオブジェクトとの関連付けのためクローズ機能は、自動的にフラッシュを記憶媒体に書き込まれたバッファのデータを呼び出します。
()関数のフラッシュを呼び出さない場合は、プログラムでF.は、その後、物理ディスクへの実際の書き込みデータ)は(クローズ関数呼び出しでオフになっています。そのため、いくつかの重要なデータが失われるのを防ぐために、すぐに書き込みファイルにフラッシュ()関数を使用する必要があります。
書き込み(2)オブジェクトクラス
A. CArchiveの使用保存/クラスオブジェクトをロードし、クラスがシリアル化をサポートしている必要があります。
B.カスタムシリアライゼーションクラスの5つのステップ:
①継承CObjectのクラス。
②過負荷シリアライズメンバー関数のCObjectのクラス。
③.hファイルのクラスでは、文をシリアライズ:DECLARE_SERIAL(クラス名);
④引数なしのコンストラクタを定義します。
⑤.cppファイルのクラスでは、宣言:IMPLEMENT_SERIAL(クラス名、CObjectのバージョン番号)
セーブ/ロード基本データ型、上記の手順(1)を使用してCでシリアライズメンバ関数カスタム。以下の通りです。ファイル操作の場所では、関数が直接呼び出すことができます。
void CXXXX::Serialize(CArchive &ar)
{
if (ar.IsStoring())
{ //保存
//Add code....
}
else
{ //读取
//Add code...
}
}
この方法でD.は、分散ファイルシステム内に実装されてもよいです。通常、ドキュメントビューのプログラミングでは、私たちは、ドキュメントクラス内のデータオブジェクトを定義し、そのシリアル化機能に可能性のあるデータ/ロードの保存を実装します。
私たちは、通常、データの格納に使用するコンテナを定義します。例えば、私のプロジェクトでは、私が使用しました
CTypedPtrList <CObList、のCObject *> m_DataList。
これは、要素がCObjectのクラスオブジェクトへのポインタで、リスト、私たちはクラスのサポートのシリアル化をカスタマイズしたとき、あなたはこのリストに追加されたデータを置くことができ、それがデータの管理と保存のために非常に便利です。
最後の勧告は2つのURL、
http://hi.baidu.com/andywangcn/blog/item/f892b43fa42dc13270cf6cde.html一例である、我々は見ることができます。
http://hi.baidu.com/bin545/blog/item/1a6a58af96d164fdfaed5028.htmlいくつかの分析、綿密な調査を行うには、クラスのCArchiveメンバ関数のソースの内部。