如何在MFC中使用相同的序列化方法将信息保存在两个文件中

如何在MFC中使用相同的序列化方法将信息保存在两个文件中,mfc,Mfc,我试图在点击按钮后将信息保存在2个文件中,如下所示,但它正在创建大小为0KB的文件2。正在创建两个文件,但文件1有内容,但文件2没有大小为0KB的内容。请告诉我我犯了什么错误,并告诉我是否有更好的程序使用MFC中的序列化方法将信息存储在两个文件中: void CMFCserializedemoDlg::OnBnClickedButton2() { // TODO: Add your control notification handler code here

我试图在点击按钮后将信息保存在2个文件中,如下所示,但它正在创建大小为0KB的文件2。正在创建两个文件,但文件1有内容,但文件2没有大小为0KB的内容。请告诉我我犯了什么错误,并告诉我是否有更好的程序使用MFC中的序列化方法将信息存储在两个文件中:

   void CMFCserializedemoDlg::OnBnClickedButton2()
    {
        // TODO: Add your control notification handler code here
        UpdateData(TRUE);
        CEmployee employee;
        CFile file;
        file.Open(L"EmployeeInfo.hse", CFile::modeCreate | CFile::modeWrite);
        CArchive ar(&file, CArchive::store);
        employee.empID = m_EmployeeId;
        employee.empName = m_EmployeeName;
        employee.age = m_EmployeeAge;
        employee.Serialize(ar);
        ar.Close();
        CFile file2;
        file2.Open(L"EmployeeInfo1.hse", CFile::modeCreate | CFile::modeWrite);
        CArchive ar1(&file, CArchive::store);
        employee.empID = m_EmployeeId;
        employee.empName = m_EmployeeName;
        employee.age = m_EmployeeAge;
        employee.Serialize(ar1);
        ar1.Close();
    }
    void CEmployee::Serialize(CArchive& ar) {
        CObject::Serialize(ar);

        if (ar.IsStoring())
            ar << empID << empName << age;
        else
            ar >> empID >> empName >> age;
    }
//
class CEmployee : public CObject
{
public:
    int empID;
    CString empName;
    int age;
    CEmployee(void);
    ~CEmployee(void);
private:

public:
    void Serialize(CArchive& ar);
    DECLARE_SERIAL(CEmployee);
};
void CMFCLG::OnBnClickedButton2()
{
//TODO:在此处添加控件通知处理程序代码
更新数据(真);
雇员;
文件文件;
打开(L“EmployeeInfo.hse”,CFile::modeCreate | CFile::modeWrite);
CArchive-ar(文件,CArchive::store)(&file);
employee.empID=m_EmployeeId;
employee.empName=m_EmployeeName;
employee.age=m_EmployeeAge;
employee.Serialize(ar);
ar.Close();
文件2;
文件2.打开(L“EmployeeInfo1.hse”,CFile::modeCreate | CFile::modeWrite);
CArchive ar1(文件,CArchive::store)(&file);
employee.empID=m_EmployeeId;
employee.empName=m_EmployeeName;
employee.age=m_EmployeeAge;
employee.Serialize(ar1);
ar1.Close();
}
void CEmployee::序列化(CArchive&ar){
CObject::序列化(ar);
if(ar.IsStoring())
ar>empName>>年龄;
}
//
类别雇员:公共项目
{
公众:
int empID;
CString-empName;
智力年龄;
受雇人(无效);
~CEmployee(无效);
私人:
公众:
无效序列化(CArchive&ar);
申报序列号(雇员);
};
您有:

CFile file2;
file2.Open(L"EmployeeInfo1.hse", CFile::modeCreate | CFile::modeWrite);
CArchive ar1(&file, CArchive::store);
请注意,您正在将
file
的地址而不是
file2
传递到
ar1
变量中。这应该是:

CArchive ar1(&file2, CArchive::store);

这就是原因。

file2.Open上设置断点(…
并查看文件
EmployeeInfo.hse
是否在断点被击中时创建。然后询问并告诉我们发生了什么。感谢您的回复,两个文件都在创建中,但文件1有内容,但文件2没有内容。它的大小为0kB。我看不出您的代码中有任何明显错误。进入MFC代码可能有助于找出问题所在。您将错误的文件传递到了第二个归档文件中。请参阅我的答案。如果您将以CFile开头、以.Close()结尾的两个块都用大括号括起来并进行编译,您将看到@andrew已经指出的问题-您应该将file2传递给ar1。