Discussão do artigo "Manipulação de Arquivos ZIP em Linguagem MQL5 Pura" - página 5

 
Bom dia, Vasily! A situação é a seguinte: faço o download de um livro de posições de pedidos da OANDA, eles chegam embalados na API v.2, quando tento descompactá-los usando o CZip, recebo a seguinte mensagem: "Houve um erro de processamento de arquivo no momento de seu carregamento: ZIP_ERROR_BAD_FORMAT_ZIP". Não sei exatamente com o que ele está compactado, mas o WinZip desdobra o arquivo recebido. Os arquivos estão anexados por precaução.
Arquivos anexados:
oanda_data.txt  85 kb
 
O arquivo não pôde ser anexado. Se precisar dele, eu o enviarei para seu e-mail.
 
Fiz o download do zip e há vários arquivos no arquivo. Tentei descompactá-los e nada funcionou. Estou examinando o código e me deparo com este fragmento:
//+------------------------------------------------------------------+
//|| Descompacte o conteúdo do zip atual e salve-o como um arquivo no disco.
//+------------------------------------------------------------------+
bool CZipContent::UnpackOnDisk(string folder, int file_common)
{
   return false;   
}


Entendo que a descompactação não funciona?
 
Alexey Oreshkin:
Eu analiso o código e chego a este fragmento:

ou seja, entendi corretamente que a descompactação não funciona?

Observe o código no modo de depuração e você chegará ao fragmento correto. A descompactação funciona - eu a utilizo todos os dias.

 
Alexey Oreshkin:
Fiz o download do zip, há vários arquivos no arquivo. Estou tentando descompactar e nada funciona. Olho para o código e chego a este fragmento:
Então entendo corretamente que a descompactação não funciona?

Não, não funciona. Observe com atenção, UnpackOnDisk é um método virtual. Ele não tem implementação na classe abstrata Content. Infelizmente, o MQL não permite que você crie métodos virtuais sem implementação, portanto, você precisa colocar impedimentos como o que você encontrou. O trabalho real de salvar um arquivo em disco é feito por CZipFile::UnpackOnDisk e CZipDirectory::UnpackOnDisk. Isso ocorre porque a criação de um diretório e de um arquivo no disco são operações diferentes e, portanto, são realizadas por métodos diferentes.

 
M24:
Não foi possível anexar o arquivo, se precisar dele, eu o enviarei para seu e-mail.

Esse é, de fato, o aspecto mais importante. Primeiro, verifique se está usando a versão mais recente do CZip e tente descompactar novamente.

 
fxsaber:

Veja o código no modo de depuração e você chegará à parte necessária. A descompactação funciona - eu a utilizo todos os dias.

Então o que estou fazendo de errado. Aqui está o meu código:

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

Espero ver tudo descompactado na pasta pública, mas ela está vazia. Não preciso de mais nada. Há o info.zip na pasta pública.

 
Alexey Oreshkin:

então o que estou fazendo de errado. Aqui está meu código:

Espero ver tudo descompactado na pasta pública, mas ela está vazia. Não preciso de mais nada. Há o info.zip na pasta pública.

Você terá que especificar a pasta, pois as aspas duplas funcionam com erro.

 
fxsaber:

Você terá que especificar uma pasta, pois as aspas duplas funcionam com erro.

Honestamente, nada mudou:

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

o resultado também é nulo.


p.s. Peguei um exemplo do artigo

   string cookie,headers;
   string mql_url="https://www.mql5.com/pt/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);

Alterei a url (nas configurações do terminal, permiti o acesso) e isso é tudo, o resultado também é zero. Pensei em transferir o analisador do Sharp para cá e acho que não. Tanto esforço para descompactar o arquivo e nada (

 
Alexey Oreshkin:

Sinceramente, nada mudou:

o resultado também é nulo.

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

void OnStart()
{
  CZip Zip;

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