MFC Работа с файлами. Сериализация

Мне необходимо реализовать сохранение данных в файл с помощью сериализации. В меню файлов командами "сохранить как" и "открыть я реализовал", но мне надо реализовать в файл сохранение студента при нажатой кнопке в диалоге. Реализация MFCDoc.h(файл документа): Код:

#pragma once
#include "resource.h"
#include <afxwin.h>
#include "list.h"
#define UPDATE_ADD_STUDENT 1
#define UPDATE_DEL_STUDENT 2
#define UPDATE_EDIT_STUDENT 3
class CursuchDoc : public CDocument
{
protected: // создать только из сериализации
    CursuchDoc() noexcept;
    DECLARE_DYNCREATE(CursuchDoc)

// Атрибуты
public:
    List m_list;
// Операции
public:

// Переопределение
public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);
....

Реализация MFCDoc.cpp: Код:

void CursuchDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())//запись
    {
        int nCount = m_list.GetCount();

        ar << nCount;
        Student* st = m_list.GetFirst();
        while (st != NULL)
        {
            st->Serialize(ar);
            st = m_list.GetNext();
        }
    }
    else//чтение
    {
        int nCount = 0;
        ar >> nCount;
        for (int i = 0; i < nCount; ++i)
        {
            Student st;
            st.Serialize(ar);
            m_list.PushBack(&st);
        }
    }
}

Мне нужно сделать тоже самое с диалоговой кнопкой. Реализация ясна. Код:

CFile fileIn;

    if (!fileIn.Open(m_strfile, CFile::modeWrite | CFile::modeCreate))
    {
        CString sMsg;
        sMsg.Format(L"Не могу открыть файл %s",
            m_strfile);
        MessageBox(sMsg, L"Ошибка", MB_OK | MB_ICONERROR);
        return FALSE;
    }
    CArchive ar(&fileIn, CArchive::store);
    Student tt;
    tt.Setf(L"rferf");
    hist->PushBack(&tt);
    int nCount = hist->GetCount();
    ar << nCount;
    Student* st = hist->GetFirst();
    while (st != NULL)
    {
        st->Serialize(ar);
        st = hist->GetNext();
    }
    ar.Close();
    fileIn.Close();
    UpdateData(FALSE);

Вот только студент должен добавляться к существующему списку студентов(m_list в MFCDoc.cpp), а не к пустому. переменная List hist -- неудачная попытка получить ссылку на m_list, объявленный в MFCDOC.h. Я не знаю как получить m_list, который мне нужен то есть из файла, который я открыл. Ведь, когда я в меню открываю свой файл со студентами программа находит нужный список m_list. Вот, что я про это прочитал:

Вот что делает фреймворк, когда пользователь приложения выдает команду «Сохранить как» из меню «Файл»: Представляет поле для диалога Save As и получает имя файла от пользователя. Открывает файл, названный пользователем в CFile качестве объекта. Создает CArchive объект, упомянение на этот CFile объект. При создании CArchive объекта фреймворк устанавливает режим "хранить" (написать, сериализовать), в отличие от "нагрузки" (читай, десериализировать). Вызывает Serialize функцию, CDocument определяемую в вашем классе, передавая ее ссылкой на CArchive объект.

Я хочу сделать тоже самое и хочу вызвать функцию Serialize явно из CDocument или как-то получить указатель на список m_list, но я не знаю как это сделать.


Ответы (0 шт):