Deux manières de créer un objet CArchive
Il existe deux manières de créer un objet CArchive
:
Création implicite d’un objet CArchive via l’infrastructure
Le moyen le plus courant et le plus simple consiste à laisser l’infrastructure créer un CArchive
objet pour votre document pour le compte des commandes Enregistrer, Enregistrer sous et Ouvrir dans le menu Fichier.
Voici ce que fait l’infrastructure lorsque l’utilisateur de votre application émet la commande Enregistrer sous dans le menu Fichier :
Présente la boîte de dialogue Enregistrer sous et obtient le nom de fichier de l’utilisateur.
Ouvre le fichier nommé par l’utilisateur en tant qu’objet
CFile
.Crée un
CArchive
objet qui pointe vers cetCFile
objet. Lors de la création de l’objetCArchive
, l’infrastructure définit le mode sur « store » (écriture, sérialisation), par opposition à « charger » (lecture, désérialisation).Appelle la
Serialize
fonction définie dans votreCDocument
classe dérivée, en lui transmettant une référence à l’objetCArchive
.
La fonction de Serialize
votre document écrit ensuite des données dans l’objet CArchive
, comme expliqué sous peu. À l’issue de votre Serialize
fonction, l’infrastructure détruit l’objet CArchive
, puis l’objet CFile
.
Par conséquent, si vous laissez l’infrastructure créer l’objet CArchive
pour votre document, il vous suffit d’implémenter la fonction du Serialize
document qui écrit et lit dans et à partir de l’archive. Vous devez également implémenter Serialize
pour tous CObject
les objets dérivés que la fonction du Serialize
document sérialise directement ou indirectement.
Création explicite d’un objet CArchive
Outre la sérialisation d’un document via l’infrastructure, il existe d’autres occasions lorsque vous pouvez avoir besoin d’un CArchive
objet. Par exemple, vous souhaiterez peut-être sérialiser des données vers et à partir du Presse-papiers, représenté par un CSharedFile
objet. Vous pouvez également utiliser une interface utilisateur pour enregistrer un fichier différent de celui proposé par l’infrastructure. Dans ce cas, vous pouvez créer explicitement un CArchive
objet. Vous procédez de la même façon que l’infrastructure, à l’aide de la procédure suivante.
Pour créer explicitement un objet CArchive
Construisez un
CFile
objet ou un objet dérivé deCFile
.Passez l’objet
CFile
au constructeur pourCArchive
, comme illustré dans l’exemple suivant :CFile theFile; theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite); CArchive archive(&theFile, CArchive::store);
Le deuxième argument du
CArchive
constructeur est une valeur énumérée qui spécifie si l’archive sera utilisée pour stocker ou charger des données vers ou à partir du fichier. LaSerialize
fonction d’un objet case activée cet état en appelant laIsStoring
fonction pour l’objet archive.
Une fois que vous avez terminé de stocker ou de charger des données vers ou depuis l’objet CArchive
, fermez-le. Bien que les CArchive
objets (et CFile
) ferment automatiquement l’archive (et le fichier), il est recommandé de le faire explicitement, car il facilite la récupération à partir d’erreurs. Pour plus d’informations sur la gestion des erreurs, consultez l’article Exceptions : Intercepter et supprimer des exceptions.
Pour fermer l’objet CArchive
L’exemple suivant montre comment fermer l’objet
CArchive
:archive.Close(); theFile.Close();