一、MFC将单个数据写文件:
二、从文件中读取单个数据:
三、将链表数据写入文件:
四、MFC读文件中的链表到内存
CStudent st;//假设有学生类,其构造函数会初始化三个成员变量m_stuID、m_stuID、m_stuScore
m_stuID = this->m_stuID;//this->m_stuID是窗体类中的成员
m_stuName = this->m_stuName;
m_stuScore = this->m_stuScore;
CFile file;
//=======================写=======================
file.Open(_T("E:\\student.data"),CFile::modeCreate|CFile::modeReadWrite);//打开/创建文件,打开后对其进行读写
CArchive ar(&file,CArchive::Mode::store);//这个包有两个方向(存储和读取),这里用文件进行存储
ar.WriteObject(&st);//把地址给他,它会自己写
//======================================================
ar.Close();
file.Close();
二、从文件中读取单个数据:
CFile file;
file.Open(_T("E:\\student.data"), CFile::modeReadWrite);//打开/创建文件,打开后对其进行读写
CArchive ar(&file, CArchive::Mode::load);//这个包有两个方向(存储和读取),这里用文件进行读取
CStudent *p = (CStudent *)ar.ReadObject(CStudent::GetThisClass());//p的对象是在ar包中创建的,因此虽然这里没有new,但是在函数尾部要delete
ar.Close();
file.Close();
//====================将读出的数据进行显示=============
this->m_stuID = p->m_stuID;
this->m_stuName = p->m_stuName;
this->m_stuScore = p->m_stuScore;
this->UpdateData(FALSE);
//====================================================
delete p;
三、将链表数据写入文件:
CStudent stA, stB, stC;
stA.m_stuID = 1;
stA.m_stuName = "A";
stA.m_stuScore = 23;
stB.m_stuID = 2;
stB.m_stuName = "B";
stB.m_stuScore = 34;
stC.m_stuID = 3;
stC.m_stuName = "C";
stC.m_stuScore = 63;
//这里不用这种方法:
//CArray<CStudent*, CStudent*>list;//容器,相当于标准模板库中的vector,是用数组实现的//
//第一个参数:插入到链表中的数据类型,第二个参数:以后使用链表时,从链表中取出的每个数据为原数据的引用
//list.SetSize(10, 10);
CObList list;
list.AddTail(&stA);
list.AddTail(&stB);
list.AddTail(&stC);
CFile file;file.Open(_T("E:\\student.data"),CFile::modeCreate|CFile::modeReadWrite);//打开/创建文件,打开后对其进行读写
CArchive ar(&file,CArchive::Mode::store);//这个包有两个方向(存储和读取),这里用文件进行存储ar.WriteObject(&list);//把地址给他,它会自己写ar.Close();
file.Close();
四、MFC读文件中的链表到内存
CFile file;
file.Open(_T("E:\\student.data"), CFile::modeReadWrite);//打开/创建文件,打开后对其进行读写
CArchive ar(&file, CArchive::Mode::load);//这个包有两个方向(存储和读取),这里用文件进行存储
CObList *list = (CObList *)ar.ReadObject(CObList::GetThisClass());
ar.Close();
file.Close();
POSITION pos=list->GetHeadPosition();//系统函数
while (pos != NULL)
{
CStudent *temp=(CStudent*)list->GetAt(pos);//系统函数
list->GetNext(pos);//系统函数
}
delete list;
五、文件对话框
//打开文件
CFileDialog dlg(TRUE, _T("*.*"));//文件打开保存时弹出的对话框
if (dlg.DoModal() == IDOK)
{
//CString filename=dlg.GetFileName();//得到文件名
CString filename = dlg.GetPathName();//得到文件名
MessageBox(filename, _T("fadf"));//文件名,窗体标题
}
//保存文件
CFileDialog dlg(FALSE, _T("*.*"));//文件打开保存时弹出的对话框