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 utworzenie CArchive
obiektu dla dokumentu w imieniu poleceń Zapisz, Zapisz jako i Otwórz w menu Plik.
Oto, co platforma robi, gdy użytkownik aplikacji wystawia polecenie Zapisz jako z menu Plik:
Wyświetla okno dialogowe Zapisz jako i pobiera nazwę pliku od użytkownika.
Otwiera plik o nazwie użytkownika jako
CFile
obiekt.Tworzy obiekt wskazujący
CArchive
tenCFile
obiekt. Podczas tworzeniaCArchive
obiektu platforma ustawia tryb "store" (zapis, serializowanie), w przeciwieństwie do "ładowania" (odczyt, deserializowanie).Wywołuje funkcję zdefiniowaną
Serialize
wCDocument
klasie -pochodnej, przekazując jej odwołanie doCArchive
obiektu.
Funkcja dokumentu Serialize
zapisuje następnie dane w CArchive
obiekcie, jak wyjaśniono wkrótce. Po powrocie CArchive
z Serialize
funkcji struktura niszczy obiekt, a następnie CFile
obiekt.
W związku z tym, jeśli platforma pozwoli utworzyć CArchive
obiekt dla dokumentu, wszystko, co musisz zrobić, to zaimplementować funkcję dokumentu Serialize
, która zapisuje i odczytuje do i z archiwum. Należy również zaimplementować Serialize
dla dowolnych CObject
obiektów pochodnych, które funkcja dokumentu Serialize
z kolei serializuje bezpośrednio lub pośrednio.
Jawne tworzenie obiektu CArchive
Oprócz serializacji dokumentu za pośrednictwem struktury, istnieją inne sytuacje, w których może być potrzebny CArchive
obiekt. 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. Można to zrobić w taki sam sposób, jak w przypadku platformy, korzystając z poniższej procedury.
Aby jawnie utworzyć obiekt CArchive
Konstruowanie
CFile
obiektu lub obiektu pochodzącego zCFile
elementu .Przekaż obiekt do konstruktora
CFile
dlaCArchive
elementu , 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. FunkcjaSerialize
obiektu sprawdza ten stan, wywołującIsStoring
funkcję dla obiektu archiwum.
Po zakończeniu CArchive
przechowywania lub ładowania danych do lub z obiektu zamknij go. CArchive
Mimo że obiekty (i CFile
) automatycznie zamykają archiwum (i plik), dobrym rozwiązaniem jest jawne zrobienie tego, ponieważ ułatwia 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
W poniższym przykładzie pokazano, jak zamknąć
CArchive
obiekt:archive.Close(); theFile.Close();