Dva způsoby vytvoření objektu CArchive
Objekt můžete vytvořit CArchive
dvěma způsoby:
Implicitní vytvoření objektu CArchive prostřednictvím architektury
Nejběžnějším a nejsnadnějším způsobem je nechat architekturu CArchive
vytvořit objekt pro dokument jménem příkazů Uložit, Uložit jako a Otevřít v nabídce Soubor.
Toto je to, co architektura dělá, když uživatel vaší aplikace vydá příkaz Uložit jako z nabídky Soubor:
Zobrazí dialogové okno Uložit jako a získá název souboru od uživatele.
Otevře soubor pojmenovaný uživatelem
CFile
jako objekt.CArchive
Vytvoří objekt, který odkazuje na tentoCFile
objekt. Při vytváření objektuCArchive
architektura nastaví režim na "store" (zápis, serializace), na rozdíl od "načtení" (čtení, deserializace).Volá funkci definovanou
Serialize
ve vašíCDocument
-odvozené třídě a předá ji odkaz naCArchive
objekt.
Funkce dokumentu Serialize
pak zapíše data do objektu CArchive
, jak je vysvětleno krátce. Po návratu z vaší Serialize
funkce architektura zničí CArchive
objekt a pak CFile
objekt.
Pokud tedy necháte architekturu CArchive
vytvořit objekt pro dokument, stačí implementovat funkci dokumentu Serialize
, která zapisuje a čte do a z archivu. Musíte také implementovat Serialize
pro všechny CObject
-odvozené objekty, které funkce dokumentu Serialize
následně serializuje přímo nebo nepřímo.
Explicitní vytvoření objektu CArchive
Kromě serializace dokumentu prostřednictvím architektury existují i jiné příležitosti, kdy budete potřebovat CArchive
objekt. Můžete například chtít serializovat data do schránky a ze schránky reprezentované objektem CSharedFile
. Nebo můžete chtít použít uživatelské rozhraní pro ukládání souboru, který se liší od souboru nabízeného architekturou. V takovém případě můžete objekt explicitně vytvořit CArchive
. Provedete to stejným způsobem jako architektura pomocí následujícího postupu.
Explicitní vytvoření objektu CArchive
Vytvoření objektu
CFile
nebo objektu odvozeného zCFile
.CFile
Předejte objekt konstruktoru proCArchive
, jak je znázorněno v následujícím příkladu:CFile theFile; theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite); CArchive archive(&theFile, CArchive::store);
Druhým argumentem konstruktoru
CArchive
je výčtová hodnota, která určuje, zda se archiv použije k ukládání nebo načítání dat do nebo ze souboru.Serialize
Funkce objektu kontroluje tento stav volánímIsStoring
funkce pro archivní objekt.
Po dokončení ukládání nebo načítání dat do nebo z objektu CArchive
je zavřete. CArchive
I když objekty (aCFile
) automaticky zavře archiv (a soubor), je vhodné to explicitně provést, protože usnadňuje obnovení z chyb. Další informace o zpracování chyb najdete v článku Výjimky: Zachytávání a odstraňování výjimek.
Zavření objektu CArchive
Následující příklad ukazuje, jak objekt zavřít
CArchive
:archive.Close(); theFile.Close();