您的位置:首页 > 其它

MFC CArchive 使用实例 文件保存与读取

2015-05-08 12:25 363 查看
12:21:43
张治国v老师 2015/5/8 12:21:43

struct STestSer 
{
	friend CArchive &operator<<(CArchive &ar, STestSer const& aTestSer)
	{
	ar<<aTestSer.nData;
	ar<<aTestSer.fData;
	ar<<aTestSer.strData;

	return ar;
	}

	friend CArchive &operator>>(CArchive &ar, STestSer& aTestSer)
	{
	ar>>aTestSer.nData;
	ar>>aTestSer.fData;
	ar>>aTestSer.strData;

	return ar;
	}

	STestSer(int nData = 0, float fData = 0.0f, CString strData = _T(""))
	{
	this->nData = nData;
	this->fData = fData;
	this->strData = strData;
	}

	int nData;
	float fData;
	CString strData;
};

typedef CArray<STestSer*, STestSer*>ArPtrTest;

//保存
void CSerTestDlg::OnBnClickedButton1()
{
	ArPtrTest arData;
	STestSer *pTest1 = new STestSer(1, 1.0f, _T("111"));
	STestSer *pTest2 = new STestSer(2, 2.0f, _T("222"));
	STestSer *pTest3 = new STestSer(3, 3.0f, _T("333"));
	arData.Add(pTest1);
	arData.Add(pTest2);
	arData.Add(pTest3);

	CFileDialog dlg(FALSE);
	if (dlg.DoModal() != IDOK)
	return;

	CString strFullPath = dlg.GetPathName();
	CFile file;
	if (!file.Open(strFullPath, CFile::modeCreate | CFile::modeReadWrite))
	{
	AfxMessageBox(_T("打开失败!"));
return;
	}

	CArchive ar(&file, CArchive::store);
	int nSize = arData.GetSize();
	ar<<nSize;
	for (int i = 0; i < nSize; i++)
	{
	ar<<(*arData[i]);
	}

	ar.Close();
	file.Close();

	// TODO: 在此添加控件通知处理程序代码
}

//打开
void CSerTestDlg::OnBnClickedButton2()
{
	CFileDialog dlg(TRUE);
	if (dlg.DoModal() != IDOK)
	return;

	CString strFullPath = dlg.GetPathName();
	CFile file;
	if (!file.Open(strFullPath, CFile::modeRead))
	{
	AfxMessageBox(_T("打开失败!"));
return;
	}
	CArchive ar(&file, CArchive::load);
	ArPtrTest arData;
	int nSize = 0;
	ar>>nSize;

	STestSer*pTest = NULL;
	for (int i = 0; i < nSize; i++)
	{
	pTest = new STestSer;
	ar>>(*pTest);
	arData.Add(pTest); 
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐