使用两种方法将列表中的数据保存进行文档中: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();
}
保存:
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();
}