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("*.*"));//文件打开保存时弹出的对话框



  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值