¡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.
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)
{
returnfalse;
}
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.
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 (
Entiendo que al descomprimir no funciona ?
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.
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.
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.
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.
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.
Tendrás que especificar una carpeta, ya que las comillas dobles dan error.
Sinceramente, nada ha cambiado:
el resultado también es nulo.
p.d. Tomé un ejemplo del artículo
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 (
Sinceramente, nada ha cambiado:
el resultado también es nulo.