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

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

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

两种方法将CListCtrl控件中列表中的数据保存到文件中_第1张图片

方法一:使用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();
}



你可能感兴趣的:(MFC界面,CListCtrl,保存列表数据,保存CListCtrl数据)