亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【VC編程技巧】文件?2.3CArchive的用法

系統 3973 0

CArchive 對象提供了一個類型安全緩沖機制 CArchive 對象提供了一個類型安全緩沖機制。用于將可序列化對象寫入 CFile 對象或從中讀取可序列化對象。通常, CFile 對象表示磁盤文件;但是,它也可以是表示“剪貼板”的內存文件(CSharedFile 對象)

CArchive 允許以一個永久 二進制 (通常為 磁盤存儲 )的形式保存一個對象的復雜網絡,它可以在對象被刪除時,還能永久保存。可以從永久存儲中裝載對象,在內存中重新構造它們。使得數據永久保留的過程就叫作“ 串行化 ”。

CArchive 支持基本數據類型( BYTE、WORD、LONG、DWORD、float、double、int、short、char、unsigned CString ), CObject 派生的類對象,,同時也支持 CSocket,CSocketFile。


構造 ? CArchive:

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

參數:

pFile
為了使持久性數據的最終源或目標的 CFile 對象的指針。

nMode
指定的標志對象是否將填充或存儲到存檔。 nMode 參數必須具有下列值之一:

CArchive::load 從存檔加載數據。 需要 CFile 僅讀取權限。

CArchive::store 將數據保存到存檔。 需要 CFile 寫權限。

當存檔析構函數調用時,CArchive::bNoFlushOnDelete 防止存檔自動調用 Flush。 如果設置此標志,您負責顯式調用 Close,在調用析構函數之前。 如果不,數據將損壞。

nBufSize
指定文件內部緩沖區的大小的整數,以字節為單位)。 請注意默認緩沖區大小為4,096字節。 如果您定期存檔大型對象,您將提高性能,如果您使用的是文件緩沖區大小的多個的一個更大的緩沖區大小。

lpBuf
該范圍 nBufSize用戶提供的緩沖區的可選指針。 如果未指定此參數,存檔從本地堆分配緩沖區并釋放它,當銷毀對象時。 存檔不釋放用戶提供的緩沖區。

備注:

您不能使用 CFile 操作修改文件的狀態,直到您關閉了存檔。 任何此類操作將損壞存檔的完整性。 在序列化時在+任何+時間可以訪問文件指針的位置。獲取存檔文件對象從 GetFile 成員函數然后使用 CFile::GetPosition 功能。 您應在獲取文件指針的位置之前調用 CArchive::Flush。



下面是示例代碼(CArchiveDemo)

?

    // Person.h: interface for the CPerson class.

//

//////////////////////////////////////////////////////////////////////



#if !defined(AFX_PERSON_H__B12B4253_72D0_49D4_98FE_88145950801B__INCLUDED_)

#define AFX_PERSON_H__B12B4253_72D0_49D4_98FE_88145950801B__INCLUDED_



#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000



class CPerson : public CObject  //繼承CObject對象

{

	DECLARE_SERIAL(CPerson)//手動添加

private:

	CString m_strName;

	unsigned m_uAge;

public:	  

	CPerson();

	virtual ~CPerson();

	VOID SetName(CString name);

	CString GetName();

	VOID SetAge(unsigned age);

	unsigned GetAge();

	virtual VOID Serialize(CArchive& ar);//重載CObject對象方法

};



#endif // !defined(AFX_PERSON_H__B12B4253_72D0_49D4_98FE_88145950801B__INCLUDED_)
  

?

    // Person.cpp: implementation of the CPerson class.

//

//////////////////////////////////////////////////////////////////////



#include "stdafx.h"

#include "CArchiveDemo.h"

#include "Person.h"



#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif



//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

IMPLEMENT_SERIAL(CPerson, CObject, 1)//手動去添加

CPerson::CPerson()

{

	m_uAge = 0;

}



CPerson::~CPerson()

{

}



VOID CPerson::SetName(CString name)

{

	m_strName = name;

}

CString CPerson::GetName()

{

	return m_strName;

}

VOID CPerson::SetAge(unsigned age)

{

	m_uAge = age;

}

unsigned CPerson::GetAge()

{

	return m_uAge;

}

VOID CPerson::Serialize(CArchive& ar)

{

	if (ar.IsLoading())//加載

		ar >> this->m_strName >> this->m_uAge;

	else

		ar << this->m_strName << this->m_uAge;

}
  
    // CArchiveDemo.cpp : Defines the entry point for the console application.

//



#include "stdafx.h"

#include "CArchiveDemo.h"

#include "Person.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif



/////////////////////////////////////////////////////////////////////////////

// The one and only application object



CWinApp theApp;



using namespace std;



int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

	//1>CArchive對基本類型支持



	//CArchive寫操作

	CFile myfile("info.txt", CFile::modeCreate|CFile::modeReadWrite);

	CArchive ar_s(&myfile, CArchive::store);

	WORD wAge_s = 28;

	ar_s << wAge_s;

	ar_s.Close();

	myfile.Close();



     //CArchive讀操作

	myfile.Open("info.txt", CFile::modeRead);

	CArchive ar_l(&myfile, CArchive::load);

	WORD wAge_l = 0;

	ar_l >> wAge_l;

	ar_l.Close();

	myfile.Close();



	//2>CArchive對類對象支持



	CPerson Zhang;

	Zhang.SetName("張三");

	Zhang.SetAge(23);



	CPerson Li;

	Li.SetName("李四");

	Li.SetAge(27);



	//CArchive寫操作

	CFile fperson("person_info.txt", CFile::modeCreate|CFile::modeWrite);

	CArchive ar_store(&fperson, CArchive::store);

	ar_store << &Zhang << &Li;//序列化寫入

	ar_store.Close();

	fperson.Close();



	//CArchive讀操作

	CPerson *p1 = NULL, * p2 = NULL;

	fperson.Open("person_info.txt", CFile::modeRead);

	CArchive ar_load(&fperson, CArchive::load);

	ar_load >> p1 >> p2;//序列化讀入

	ar_load.Close();

	fperson.Close();



	//打印以下讀入數據

	printf("name:%s,age:%u\n",p1->GetName(), p1->GetAge());

	printf("name:%s,age:%u\n",p2->GetName(), p2->GetAge());

	delete p1; p1 = NULL;

	delete p2; p2 = NULL;	



	return 0;

}




  


?


?

【VC編程技巧】文件?2.3CArchive的用法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品免费国产一区二区三区 | 99re5在线精品视频热线 | 日日夜操 | 亚洲玖玖 | 91久久精品日日躁夜夜躁欧美 | 狠狠干夜夜 | 午夜看毛片 | 欧美13一16sex 性 | 成年网站视频在线观看 | 亚洲精品成人一区 | 亚洲高清日韩精品第一区 | 国产日韩欧美综合一区二区三区 | 五月婷在线视频 | 亚洲国产第一区二区三区 | 欧美伊人久久大香线蕉综合69 | 久久www免费人成_看 | 天天操一操 | 欧美日韩国产另类一区二区三区 | 日本人成年视频在线观看 | 久热这里有精品 | 婷婷综合 在线 | 五月亭亭激情五月 | 四虎国产成人永久精品免费 | aaaa级片| 免费观看成人www精品视频在线 | 99在线热播| 久久精品资源 | 久久影院在线 | 99看片网| 久久精品国产74国产 | 美女被视频在线看九色 | 国产草比 | 九九99热久久精品在线9 | 国产在线精品成人一区二区三区 | 亚洲日韩视频 | 欧美美女一区二区三区 | 国产中文字幕第一页 | 91精品国产品国语在线不卡 | 九九99香蕉在线视频免费 | 日韩久久视频 | 久久久久久久国产精品毛片 |