Résumé MFC (a): les opérations de fichier MFC, recherchez et sélectionnez le résumé (2)

(B) de fonctionnement de la classe CArchive

     classe CArchive lire et écrire les données de mémoire tampon pendant le stockage et la lecture de programme définit l'objet de classe. Dans la vue du document de programmation, et la liaison CList CArray comme peut facilement obtenir des données de lecture et d'écriture.

     (1) de base crée des données d'affichage lecture objet CArchive ----

     A. Avant d'utiliser CArhive classe CFile doit être un objet de fichier, et doit assurer le bon fonctionnement CArchive CFile doit être dans un état ouvert, et l'opération ne change pas pendant l'état du fichier.

     B. Définissez ensuite l'objet CArchive, l'associer avec un objet CFile et spécifier quel mode est utilisé pour mémoire tampon de lecture ou d'écriture:

      Ar le CArchive ( pfile, // fichier cible, pointeur d'objet CFile

                              nMode , // mode de fonctionnement, la lecture / écriture

                              nBufSize , // taille de la mémoire tampon est spécifiée, la valeur par défaut est 4096

                              lpBuf            // défauts de pointeur de mémoire tampon à NULL, i.e. supprimer un segment de mémoire, après la libération automatique du local

                            );

      C. Pour les types de données de base, peut être utilisé directement opérateur >> et opérateur << pour les données de lecture et d' écriture. Ce type de données BYTE, WORD, LONG, DWORD, float, double, int, short, char, non signé u comme. Pour CString objet peut également être utilisé.

       Pour la structure de type de données sur mesure, nous nous pouvons remplacer ces deux opérateurs, un exemple est suit comme.

    typedef struct test_st
    {
         float valueX;
         float valueY;

         //重载<<和>>运算符
        friend CArchive& AFXAPI operator <<(CArchive& ar, const test_st& info)
      {
            //保存
           ar<<info.valueX<<info.valueY;
           return ar;
      }
       friend CArchive& AFXAPI operator >>(CArchive& ar, test_st& info)
       {
            //读取
            ar>>info.valueX>>info.valueY;
            return ar;
       }
    }TEST;

     D. Utilisation Lire et écrire peuvent spécifier la longueur des données pour les données de lecture / écriture, la longueur des données se réfère ici au nombre d'octets.

         Utilisez WriteString chaîne inscriptible, le ReadString lire une ligne de caractères. Notez que cela ne soit pas une chaîne de WriteString de ligne d'écriture n'est pas écrit lorsque la chaîne WriteString d'écriture « \ 0 » est pas écrit automatiquement « \ n » . Voici un exemple de MSDN, je crois telling.

CFile myFile("myfile", CFile::modeCreate | CFile::modeReadWrite);
CString str1="String1", str2="String2", str;

// Create a storing archive.
CArchive arStore(&myFile, CArchive::store);

// Write str1 and str2 to the archive
arStore.WriteString( str1 );
arStore.WriteString( "\n" );
arStore.WriteString( str2 );
arStore.WriteString( "\n" );

// Close the storing archive
arStore.Close();

// Create a loading archive.
myFile.SeekToBegin();
CArchive arLoad(&myFile, CArchive::load);

// Verify the two strings are in the archive.
arLoad.ReadString( str );
ASSERT( str == str1 );
arLoad.ReadString( str );
ASSERT( str == str2 );

      E. IsLoading fonction IsStoring et est utilisé pour lire ou écrire est déterminée.

          Fermer la fonction de liaison avec un objet CFile coupe, avant que ce appelle automatiquement le rinçage des données de mémoire tampon écrites dans le moyen de stockage.

     F. dans le programme, puis les données d'écriture réelle sur le disque physique est désactivé dans la fonction appelant Close () sinon appeler la fonction flush (). Par conséquent, certaines données importantes doivent utiliser la fonction flush () pour les fichiers d'écriture immédiatement, pour prévenir la perte.

      Write (2) classe d'objets

       A. CArchive utilisation sauvegarder / charger un objet de classe, la classe doit prendre en charge la sérialisation.

      B. classe sérialisation personnalisée en cinq étapes:

          ① Hériter classe CObject;

          ② fonction membre surchargée Serialize CObject classe;

          ③ Dans la classe .h, déclaration sérialisation: DECLARE_SERIAL (nom de la classe);

          ④ définir un constructeur sans argument;

          ⑤ Dans la classe de fichier .cpp, a déclaré: IMPLEMENT_SERIAL (nom de la classe, CObject, numéro de version)

      C. Dans sérialisation personnalisé de la fonction de membre, en utilisant la procédure (1) ci-dessus, enregistrer les types de données de base / de charge. Comme suit. Dans les endroits où une opération de fichier, la fonction peut être appelée directement.

         void CXXXX::Serialize(CArchive &ar)
         {
              if (ar.IsStoring())
              {    //保存
                   //Add code....
              }
              else
              {   //读取

                 //Add code...
              }
         }

       D. Avec cette méthode, peut être mis en œuvre dans un stockage de données distribuées. En général, dans la programmation de vue du document, nous définissons les objets de données dans la classe de documents, puis mettre en œuvre la conservation des données / charge peut dans sa fonction Serialize.

On définit généralement un conteneur utilisé pour stocker des données. Par exemple, dans mon projet, je le

CTypedPtrList <CObList, CObject *> m_DataList;

Voici une liste, cet élément est un pointeur vers CObject objet de classe, lorsque nous sérialisation un soutien personnalisé de la classe, vous pouvez mettre les données ajoutées à cette liste, il est très pratique pour la gestion des données et de stockage.


     La dernière recommandation deux URL,

        http://hi.baidu.com/andywangcn/blog/item/f892b43fa42dc13270cf6cde.html qui est un exemple, nous pouvons regarder.

        http://hi.baidu.com/bin545/blog/item/1a6a58af96d164fdfaed5028.html source intérieure pour les fonctions membres CArchive de la classe à faire une analyse, étude approfondie.

     Unfinished, continue. . .



Publié 37 articles originaux · Praise gagné 204 · vues 440 000 +

Je suppose que tu aimes

Origine blog.csdn.net/zwgdft/article/details/7107276
conseillé
Classement