Discusión sobre el artículo "Trabajamos con archivos ZIP con los medios de MQL5, sin usar bibliotecas ajenas" - página 3

 

Guión

#include <Zip\Zip.mqh>
CZip Zip;


void OnStart()
  {
//---
   string pathdir = "DD\\";

   for(int yy2 = 2014; yy2 <= 2017; yy2++)
      {
         string FileArc = pathdir + "d" + IntegerToString(yy2) + ".zip";
         
         Print("--------------  ", FileArc);
         
         Print(FileArc, "   Zip.LoadZipFromFile= ", Zip.LoadZipFromFile(FileArc, 0) );
         
                    
         printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
         
         Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive(pathdir + "H" + IntegerToString(yy2), 0) );

      }
  }
 
Dmytro Zelenskyy:

Aquí hay otro problema, si tengo que descomprimir varios archivos en un bucle, cambiando sólo el año en el nombre.

Sólo se descomprime d2014.zip y ya está.

Prueba a borrar el archivo después de descomprimirlo.

#include <Zip\Zip.mqh>
CZip Zip;


void OnStart()
  {
//---
   string pathdir = "DD\\";

   for(int yy2 = 2014; yy2 <= 2017; yy2++)
      {
         string FileArc = pathdir + "d" + IntegerToString(yy2) + ".zip";
         
         Print("--------------  ", FileArc);
         
         Print(FileArc, "   Zip.LoadZipFromFile= ", Zip.LoadZipFromFile(FileArc, 0) );
         
                    
         printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
         
         Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive(pathdir + "H" + IntegerToString(yy2), 0) );
         Zip.Clear();

      }
  }
 

¡¡¡SÍ!!!

Me alegro de haberme dado cuenta yo mismo y haberme decidido a escribir una solución :))),

y hay una pronta respuesta :))))

¡¡¡Gracias!!!

 

¡¡¡crédito al autor por la biblioteca !!!

resultados para comparar:


1. .bin - los datos se escriben pasando a formato binario uno a uno los datos de los objetos de estructura y clase

2. .dat - los datos se convierten primero en una matriz BYTE y luego se vuelcan al disco como datos binarios

3. .zip - método 2 + compresión de software

registro de las etapas de procesamiento de creación, escritura y lectura sin compresión y con compresión:

después de cada lectura de datos de los ficheros, se realiza una comprobación con los datos originales para verificar que son correctos, no se detectan errores ))
 
La librería "flotó" con la nueva build 1816 (( Al parecer eliminaron un bug en union y ahora frunce el ceño ante el uso de un objeto estructura con un constructor en union.
 
Konstantin:
La librería "flotó" con la nueva build 1816 (( Al parecer eliminaron un bug en union y ahora frunce el ceño el uso de un objeto estructura con un constructor en union

Recomiendo rechazar el uso de un constructor para estructuras que participen en union

En lugar de constructores, es mejor utilizar la función Initialise/Init.

Por nuestra parte, algún día añadiremos la posibilidad de utilizar estructuras con constructores en union, siempre que union tenga un constructor explícito/usuario. Así, la forma y orden de construir quedará a conciencia del usuario/creador.

Pero no podemos decir cuándo (Respuesta del desarrollador)
 
Rashid Umarov:

Recomiendo no utilizar constructores para las estructuras que participan en la unión

En lugar de constructores, es mejor utilizar la función Initialise/Init.

Por nuestra parte, algún día añadiremos la posibilidad de utilizar estructuras con constructores en union, siempre que union tenga un constructor explícito/definido por el usuario. Así, la forma y el orden de construir quedarán a conciencia del usuario/creador.

Pero no podemos decir cuándo (respuesta del desarrollador).

no tiene sentido cambiarlo, ya le he enviado al desarrollador una clase rediseñada solo sin constructores en estructuras, solo agregue el metodo Init para inicializacion de estructuras y listo, solo arregla el problema con los certificados en Linux, porque es muy incompleto ))

 
Correcciones en el archivo de cabecera de la biblioteca.
Archivos adjuntos:
ZipHeader.mqh  13 kb
 
Rashid Umarov:

Recomiendo no utilizar constructores para las estructuras que participan en la unión

En lugar de constructores, es mejor utilizar la función Initialise/Init.

Por nuestra parte, algún día añadiremos la posibilidad de utilizar estructuras con constructores en union, siempre que union tenga un constructor explícito/definido por el usuario. Así, la forma y el orden de construir quedará a conciencia del usuario/creador.

Pero no podemos decir cuándo podremos hacerlo (Respuesta del desarrollador).

Creo que se equivocan claramente de tema. Había un casting explícito de estructuras - luego por alguna razón lo quitaron y decidieron que la unión "type pun" es de alguna manera mejor que el casting explícito. Entonces el constructor de estructuras empezó a interferir con la unión. También lo prohibieron. Ahora están planeando permitirlo de nuevo... Pero sus acciones hacen que muchos códigos en CodeBase no compilen ahora. Pero estas innovaciones no resuelven ningún problema.

 
Código fuente de CZip corregido para compatibilidad con versiones más recientes del compilador. Las actualizaciones estarán disponibles tras su verificación por un moderador.