Resumen MFC (a): las operaciones de archivo MFC, localice y seleccione el resumen (2)

(B) que operan la clase CArchive

     clase CArchive a leer y escribir los datos del buffer mientras que el almacenamiento y el programa de lectura define el objeto de la clase. En la vista del documento de programación y CList CArray vinculante como puede alcanzar fácilmente los datos de lectura y escritura.

     (1) Basic crea mostrar datos leídos objeto CArchive ----

     A. Antes del uso CArhive clase CFile debe ser un objeto de archivo, y debe garantizar un funcionamiento CArchive CFile debe estar en un estado abierto, y la operación no cambia durante el estado del archivo.

     B. A continuación, defina objeto CArchive, asociarlo con objeto CFile y especificar en qué modo se utiliza para amortiguar leer o escribir:

      Ar el CArchive ( archivo de destino pFile, //, puntero de objeto CFile

                              nMode , // modo de operación, la lectura / escritura

                              nBufSize , // se especifica tamaño del búfer, el valor predeterminado es 4096

                              lpBuf            // puntero de memoria intermedia por defecto a NULL, es decir, eliminar una memoria de pila, después de la liberación automática desde el local

                            );

      C. Para los tipos de datos básicos, se puede utilizar directamente operador >> y operador << para leer y escribir datos. Este tipo de datos BYTE, WORD, LONG, DWORD, float, double, int, short, char, u sin firmar similares. Para CString objeto también puede ser utilizado.

       Para la estructura de tipo de datos personalizado, nosotros mismos podemos anular estos dos operadores, un ejemplo es el siguiente.

    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. Uso Leer y Escribir puede especificar la longitud de datos para escribir datos / leen, la longitud de los datos que aquí se refiere al número de bytes.

         Uso WriteString cadena de escritura, ReadString leyó una línea de caracteres. Tenga en cuenta que esto no es una cadena WriteString línea de escritura no se escribe cuando WriteString cadena de escritura '\ 0' no es escribir de forma automática '\ n' . Aquí hay un ejemplo de MSDN, creo revelador.

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. Función IsLoading IsStoring y se utiliza para leer o escribir se determina.

          Cerrar función para la asociación con un CFile objeto de corte, antes de que esta llamará automáticamente al Flush los datos del buffer escritos en el medio de almacenamiento.

     F. en el programa, si no llamar a la función Flush (), a continuación, los datos reales de escritura en el disco físico está desactivada en la llamada función Close (). Por lo tanto, algunos datos importantes necesitan utilizar la función Flush () para archivos de escritura de inmediato, para evitar la pérdida.

      Write (2) de clase de objeto

       A. uso CArchive guardar / cargar un objeto de clase, la clase debe ser compatible con la serialización.

      B. encargo clase de serialización cinco pasos:

          ① clase CObject hereda;

          ② clase Serialize función miembro CObject sobrecargado;

          ③ En la clase de archivo .h, declaración serialización: DECLARE_SERIAL (nombre de clase);

          ④ definir un constructor sin argumentos;

          ⑤ En la clase de archivos .cpp, declaró: IMPLEMENT_SERIAL (nombre de la clase, CObject, número de versión)

      C. En Serialize personalizado función miembro, usando el procedimiento (1) anterior, Guardar tipos de datos básicos de carga /. De la siguiente manera. En los lugares donde una operación de archivo, la función se puede llamar directamente.

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

                 //Add code...
              }
         }

       D. Con este método, puede ser implementado en un dispositivo de almacenamiento de datos distribuidos. Por lo general, en la programación vista del documento, definimos objetos de datos en la clase de documento, y luego poner en práctica la conservación de los datos / carga puede en su función Serialize.

Por lo general, definimos un recipiente utilizado para almacenar datos. Por ejemplo, en mi proyecto, he utilizado la

CTypedPtrList <CObList, CObject *> m_DataList;

Esta es una lista, cuyo elemento es un puntero al objeto de clase CObject, cuando personalizamos apoyo serialización de la clase, puede poner los datos añadido a esta lista, es muy conveniente para la gestión y almacenamiento de datos.


     La última recomendación dos direcciones URL,

        http://hi.baidu.com/andywangcn/blog/item/f892b43fa42dc13270cf6cde.html que es un ejemplo, podemos mirar.

        http://hi.baidu.com/bin545/blog/item/1a6a58af96d164fdfaed5028.html dentro de la fuente para funciones miembro CArchive de la clase que se puede hacer algún estudio de análisis, en profundidad.

     Inacabado, continuó. . .



Publicado 37 artículos originales · ganado elogios 204 · vistas 440 000 +

Supongo que te gusta

Origin blog.csdn.net/zwgdft/article/details/7107276
Recomendado
Clasificación