两种方法将CListCtrl控件中列表中的数据保存到文件中

MFC界面 专栏收录该内容
69 篇文章 1 订阅

使用两种方法将列表中的数据保存进行文档中:1、使用CFile类;2、使用归档类CArchive类。

要保存的列表数据只有3列,如下:


方法一:使用CFile类保存,要定义一个固定的结构体存储数据,然后将结构体整体保存进文档中。

定义结构体:

typedef struct sData
{
	char szName[50];
	char szId[255];
	char szPW[30];

}SDATA;

保存:

void C账号管理器Dlg::OnBnClickedSave()
{
	int nCount = m_List.GetItemCount();
	if(nCount == 0)
	{
		AfxMessageBox("列表框中要保存的数据为空!");
		return;
	}

	CFileDialog fd(FALSE,".dll","账号管理器",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"信息文件(*.dll)|*.dll|所有文件(*.*)|*.*||",NULL);

	if (IDCANCEL == fd.DoModal()) return;
	
	CFile file;
	if (!file.Open(fd.GetPathName(),CFile::modeCreate|CFile::modeWrite))
	{
		AfxMessageBox("打开文件出错!");
		return;
	}

	int i(0);SDATA sData;

	while (i < nCount)
	{
		
		m_List.GetItemText(i,0,sData.szName,sizeof(sData.szName));
		m_List.GetItemText(i,1,sData.szId,sizeof(sData.szId));
		m_List.GetItemText(i,2,sData.szPW,sizeof(sData.szPW));

		file.Write(&sData,sizeof(sData));
		i++;
	}
	file.Close();
}

打开:

void C账号管理器Dlg::OnBnClickedOpen()
{
	CFileDialog fd(TRUE,".dll","账号管理器",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"信息文件(*.dll)|*.dll||",NULL);

	if (IDCANCEL == fd.DoModal()) return;

	CFile file;
	if (!file.Open(fd.GetPathName(),CFile::modeRead))
	{
		AfxMessageBox("打开文件出错!");
		return;
	}

	m_List.DeleteAllItems();

	SDATA sData;
	int i(0);

	while (file.Read(&sData,sizeof(sData)) > 0)
	{
		m_List.InsertItem(i,sData.szName);
		m_List.SetItemText(i,1,sData.szId);
		m_List.SetItemText(i,2,sData.szPW);
		i++;
	}
	file.Close();
}

方法二:使用归档类CArchive:保存的时候要先保存项目(行)的个数,之后再逐一保存每一行的数据。

保存:

void C账号管理器Dlg::OnBnClickedSave()
{
	int nCount = m_List.GetItemCount();
	if(nCount == 0)
	{
		AfxMessageBox("列表框中要保存的数据为空!");
		return;
	}

	CFileDialog fd(FALSE,".dll","账号管理器",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"信息文件(*.dll)|*.dll|所有文件(*.*)|*.*||",NULL);

	if (IDCANCEL == fd.DoModal()) return;
	
	CFile file;
	if (!file.Open(fd.GetPathName(),CFile::modeCreate|CFile::modeWrite))
	{
		AfxMessageBox("打开文件出错!");
		return;
	}

	int i(0);SDATA sData;

	while (i < nCount)
	{
		
		m_List.GetItemText(i,0,sData.szName,sizeof(sData.szName));
		m_List.GetItemText(i,1,sData.szId,sizeof(sData.szId));
		m_List.GetItemText(i,2,sData.szPW,sizeof(sData.szPW));

		file.Write(&sData,sizeof(sData));
		i++;
	}
	file.Close();
}

打开:

void C账号管理器Dlg::OnBnClickedOpen()
{
	CFileDialog fd(TRUE,".dll","账号管理器",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"信息文件(*.dll)|*.dll||",NULL);

	if (IDCANCEL == fd.DoModal()) return;

	CFile file;
	if (!file.Open(fd.GetPathName(),CFile::modeRead))
	{
		AfxMessageBox("打开文件出错!");
		return;
	}

	m_List.DeleteAllItems();

	CArchive ar(&file,CArchive::load);

	int i(0),nCount(0);

	ar>>nCount;

	CString strName,strId,strPassWord;

	while (i < nCount)
	{
		ar>>strName>>strId>>strPassWord;

		m_List.InsertItem(i,strName);
		m_List.SetItemText(i,1,strId);
		m_List.SetItemText(i,2,strPassWord);

		i++;
	}

	file.Close();
}



展开阅读全文
  • 1
    点赞
  • 4
    评论
  • 25
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值