Udostępnij przez


Dwa sposoby tworzenia obiektu CArchive

Istnieją dwa sposoby tworzenia CArchive obiektu:

Niejawne tworzenie obiektu CArchive za pośrednictwem struktury

Najprostszym i najbardziej typowym sposobem jest pozwolenie, aby framework utworzył obiekt CArchive dla Twojego dokumentu w imieniu poleceń Zapisz, Zapisz jako i Otwórz z menu Plik.

Oto, co platforma robi, gdy użytkownik aplikacji wystawia polecenie Zapisz jako z menu Plik:

  1. Wyświetla okno dialogowe Zapisz jako i pobiera nazwę pliku od użytkownika.

  2. Otwiera plik nazwany przez użytkownika jako obiekt CFile.

  3. Tworzy obiekt CArchive, który wskazuje na ten obiekt CFile. Podczas tworzenia CArchive obiektu platforma ustawia tryb "store" (zapis, serializowanie), w przeciwieństwie do "ładowania" (odczyt, deserializowanie).

  4. Wywołuje funkcję Serialize zdefiniowaną w klasie pochodnej CDocument, przekazując jej odwołanie do obiektu CArchive.

Funkcja dokumentu Serialize zapisuje następnie dane w CArchive obiekcie, jak wyjaśniono wkrótce. Po powrocie z funkcji Serialize, framework niszczy obiekt CArchive, a następnie obiekt CFile.

W związku z tym, jeśli framework utworzy obiekt CArchive dla twojego dokumentu, wszystko, co musisz zrobić, to zaimplementować funkcję Serialize dokumentu, która zapisuje do i odczytuje z archiwum. Należy również zaimplementować Serialize dla dowolnych obiektów pochodnych CObject, które funkcja dokumentu Serialize z kolei serializuje bezpośrednio lub pośrednio.

Jawne tworzenie obiektu CArchive

Oprócz serializacji dokumentu za pomocą frameworku, są też inne sytuacje, w których może być potrzebny obiekt CArchive. Na przykład możesz chcieć serializować dane do i ze Schowka reprezentowane CSharedFile przez obiekt. Możesz też użyć interfejsu użytkownika do zapisania pliku innego niż ten oferowany przez platformę. W takim przypadku można jawnie utworzyć CArchive obiekt. Robisz to tak samo, jak robi to framework, korzystając z poniższej procedury.

Aby jawnie utworzyć obiekt CArchive

  1. Skonstruuj obiekt CFile lub obiekt pochodny od CFile.

  2. Przekaż obiekt CFile do konstruktora CArchive, jak pokazano w poniższym przykładzie.

    CFile theFile;
    theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite);
    CArchive archive(&theFile, CArchive::store);
    

    Drugim argumentem konstruktora CArchive jest wyliczona wartość określająca, czy archiwum będzie używane do przechowywania lub ładowania danych do lub z pliku. Funkcja Serialize obiektu sprawdza ten stan, wywołując IsStoring funkcję dla obiektu archiwum.

Po skończeniu przechowywania lub ładowania danych do lub z obiektu CArchive zamknij go. Mimo że obiekty CArchive (i CFile) automatycznie zamykają archiwum (i plik), dobrą praktyką jest zrobienie tego jawnie, ponieważ ułatwia to odzyskiwanie po błędach. Aby uzyskać więcej informacji na temat obsługi błędów, zobacz artykuł Wyjątki: przechwytywanie i usuwanie wyjątków.

Aby zamknąć obiekt CArchive

  1. W poniższym przykładzie pokazano, jak zamknąć CArchive obiekt:

    archive.Close();
    theFile.Close();
    

Zobacz także

Serializacja: serializowanie obiektu