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

 
¡Buenos días, Vasily! La situación es la siguiente: descargo un libro de pedidos-posiciones de OANDA, llegan empaquetados en API v.2, cuando intento desempaquetarlos usando CZip, me aparece el siguiente mensaje: "Hubo un error de procesamiento del archivo en el momento de su carga: ZIP_ERROR_BAD_FORMAT_ZIP". No sé exactamente con qué está empaquetado, pero WinZip despliega el archivo recibido. Adjunto los archivos por si acaso.
Archivos adjuntos:
oanda_data.txt  85 kb
 
No se ha podido adjuntar el fichero de archivo, si lo necesitas te lo envío a tu correo.
 
He descargado el zip, hay varios archivos en el archivo. Intento descomprimirlos y nada funciona. Estoy mirando el código y me encuentro con este fragmento:
//+------------------------------------------------------------------+
//|| Descomprime el contenido actual del zip y guárdalo como archivo en disco. |||
//+------------------------------------------------------------------+
bool CZipContent::UnpackOnDisk(string folder, int file_common)
{
   return false;   
}


Entiendo que al descomprimir no funciona ?
 
Alexey Oreshkin:
Miro el código y llego a este fragmento:

es decir, ¿entiendo correctamente que descomprimir no funciona?

Mira el código en modo depuración, llegarás al fragmento correcto. Descomprimir funciona - lo uso todos los días.

 
Alexey Oreshkin:
He descargado el zip, hay varios archivos en el archivo. Estoy tratando de descomprimir y nada funciona. Miro el código y llego a este fragmento:
¿entendí bien que descomprimir no funciona?

No, no funciona. Fíjate bien, UnpackOnDisk es un método virtual. No tiene implementación en la clase abstracta Content. Desgraciadamente, MQL no permite crear métodos virtuales sin implementación, por lo que hay que poner topes como el que has encontrado. El verdadero trabajo de guardar un archivo en el disco lo hacen CZipFile::UnpackOnDisk y CZipDirectory::UnpackOnDisk. Esto se debe a que crear un directorio y un archivo en disco son operaciones diferentes, por lo que se hacen por métodos diferentes.

 
M24:
No se ha podido adjuntar el fichero de archivo, si lo necesitas te lo envío a tu correo.

En realidad eso es lo más importante. Primero, asegúrate de que estás usando la última versión de CZip e intenta descomprimir de nuevo.

 
fxsaber:

Ver el código en modo de depuración, se llega a la pieza necesaria. Descomprimir funciona - lo uso todos los días.

Entonces, ¿qué estoy haciendo mal. Aquí está mi código:

   Zip.LoadZipFromFile("info.zip",FILE_COMMON);
   Zip.UnpackZipArchive("",FILE_COMMON);

Espero ver todo descomprimido en la carpeta pública, pero está vacía. No necesito nada más. Hay info.zip en la carpeta pública.

 
Alexey Oreshkin:

entonces, ¿qué estoy haciendo mal. Aquí está mi código:

Espero ver todo descomprimido en la carpeta pública, pero está vacía. No necesito nada más. Hay info.zip en la carpeta pública.

Tendrás que especificar la carpeta, porque las comillas dobles dan error.

 
fxsaber:

Tendrás que especificar una carpeta, ya que las comillas dobles dan error.

Sinceramente, nada ha cambiado:

   Zip.LoadZipFromFile("info.zip",FILE_COMMON);
   Zip.UnpackZipArchive("Test",FILE_COMMON);

el resultado también es nulo.


p.d. Tomé un ejemplo del artículo

   string cookie,headers;
   string mql_url="https://www.mql5.com/es/code/download/9";
   int timeout=5000;
   uchar data[],zip_array[];
   if(!WebRequest("GET",mql_url,cookie,NULL,timeout,data,0,zip_array,headers))
     {
      printf("Unable to download ZIP archive from "+mql_url+". Check request and permissions EA.");
      return;
     }
   if(!Zip.CreateFromCharArray(zip_array))
     {
      printf("Loaded bad ZIP archive. Check results array.");
      return;
     }
   printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
   Zip.UnpackZipArchive("Alligator",FILE_COMMON);

He cambiado la url (en la configuración del terminal he permitido el acceso) y ya está, el resultado también es nulo. Pensaba transferir el parser de Sharp a aquí y creo que no. Tanto esfuerzo para descomprimir el archivo y nada (

 
Alexey Oreshkin:

Sinceramente, nada ha cambiado:

el resultado también es nulo.

#include <Zip\Zip.mqh> // https://www.mql5.com/es/articles/1971

void OnStart()
{
  CZip Zip;

  Zip.LoadZipFromFile("Test.zip", FILE_COMMON);
  Zip.UnpackZipArchive("Temp", FILE_COMMON);
}
Archivos adjuntos:
Test.zip  151 kb