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

 
Vasiliy Sokolov:

O notório elenco de estruturas é o palavrão. Mantenha a versão corrigida no anexo.


Pronta! Muito obrigado!

 
Vasiliy Sokolov:

Agora, analisei seu erro cuidadosamente - a mesma situação com a conversão de estrutura, mas em outro contêiner - CDictionary. Substitua o Include\Dictionary.mqh pela variante anexada abaixo.

E, sim, tudo funciona bem no MT4, e digo mais: o CZip é um cavalo de batalha em meus projetos no MT4.


O que resta é o seguinte:

'm_array' - structures containing objects are not allowed Dictionary.mqh 306 25

 
Stanislav Korotky:

O que resta é isso:

'm_array' - structures containing objects are not allowed Dictionary.mqh 306 25


A linha 306 deve ser substituída por este fragmento:

#ifdef __MQL4__
int t_size = ArrayResize(temp_array, ArraySize(m_array));
for(int i = 0; i < t_size; i++)
   temp_array[i] = m_array[i];
#else
ArrayCopy(temp_array, m_array);
#endif

No Dicionário anexo para MT4

Arquivos anexados:
Dictionary.mqh  39 kb
 
Vasiliy Sokolov:

A linha 306 deve ser substituída por este fragmento:

No Dicionário anexo para MT4.

Isso faz sentido. Muito obrigado.

PS. É verdade que, para arquivos de comprimento zero no arquivo, um cabeçalho incorreto é criado (no exemplo ZipTask1), o que os torna irrecuperáveis, mas isso pode ser resolvido - talvez seja algo no próprio teste.

 
Stanislav Korotky:

Faz sentido. Muito obrigado.

PS. É verdade que, para arquivos de comprimento zero no arquivo, é criado um cabeçalho inválido (no exemplo do ZipTask1), o que os torna irrecuperáveis, mas isso pode ser resolvido - talvez seja algo no próprio teste.

Verei o que posso fazer com o comprimento zero.

 

O que está errado? Não consigo descompactar o arquivo zip.zip (baixado do exemplo).




Registro.

18:25:47.809 Script zip_arc101 GBPUSD,H1: carregado com sucesso

0 18:25:47.830 zip_arc101 GBPUSD,H1: inicializado

0 18:25:47.830 zip_arc101 GBPUSD,H1: Handle= 1 GetLastError= 0

0 18:25:47.830 zip_arc101 GBPUSD,H1: FileReadArray= 11004

0 18:25:47.830 zip_arc101 GBPUSD,H1: Zip.CreateFromCharArray= true

0 18:25:47.830 zip_arc101 GBPUSD,H1: Arquivo carregado com sucesso. Total de arquivos: 7

0 18:25:47.836 zip_arc101 GBPUSD,H1: Zip.UnpackZipArchive= false

0 18:25:47.837 zip_arc101 GBPUSD,H1: Zip.UnpackZipArchive= false

0 18:25:47.837 zip_arc101 GBPUSD,H1: Zip.UnpackZipArchive= false

0 18:25:47.837 zip_arc101 GBPUSD,H1: uninit reason 0

0 18:25:47.839 Script zip_arc101 GBPUSD,H1: removed

 
void OnStart()
  {
//---
   uchar zip_array[];
   
   ResetLastError();
   
   int Handle = FileOpen("zip.zip", FILE_READ|FILE_BIN|FILE_COMMON );
   
   
   Print("Handle= ", Handle, "   GetLastError= ", GetLastError() );
   
   
   Print("FileReadArray= ", FileReadArray(Handle, zip_array) );
   
   
   Print("Zip.CreateFromCharArray= ", Zip.CreateFromCharArray(zip_array) );
   
   
   printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
   
   
   Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive("NNN",FILE_COMMON) );
   
   Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive("",FILE_COMMON) );
   
   Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive("", 0) );
   
  }
//+------------------------------------------------------------------+
 

O método CZip::UnpackZipArchive sempre retorna falso por algum motivo, embora faça seu trabalho. Isso é um bug. Verifique a descompactação real por meio de observações de campo.

 
Vasiliy Sokolov:

O método CZip::UnpackZipArchive sempre retorna falso por algum motivo, embora faça seu trabalho. Isso é um bug. Verifique a descompactação real por observação.


Sim. falso, mas a descompactação funciona!

 

Aqui está outro problema, se eu precisar descompactar vários arquivos em um loop, alterando apenas o ano no nome.

Apenas o d2014.zip é descompactado e é isso.



0 01:57:36.772 Script zip_arc104 GBPUSD,H1: carregado com sucesso

0 01:57:36.807 zip_arc104 GBPUSD,H1: inicializado

0 01:57:36.807 zip_arc104 GBPUSD,H1: -------------- DD\d2014.zip

0 01:57:36.815 zip_arc104 GBPUSD,H1: DD\d2014.zip Zip.LoadZipFromFile= true

0 01:57:36.815 zip_arc104 GBPUSD,H1: Arquivo carregado com sucesso. Total de arquivos: 1

0 01:57:36.906 zip_arc104 GBPUSD,H1: Zip.UnpackZipArchive= false

0 01:57:36.906 zip_arc104 GBPUSD,H1: -------------- DD\d2015.zip

0 01:57:36.912 zip_arc104 GBPUSD,H1: DD\d2015.zip Zip.LoadZipFromFile= true

0 01:57:36.912 zip_arc104 GBPUSD,H1: Arquivo carregado com sucesso. Total de arquivos: 1

1 01:57:36.912 zip_arc104 GBPUSD,H1: acesso de ponteiro inválido em 'Zip.mqh' (407,28)

0 01:57:36.913 zip_arc104 GBPUSD,H1: uninit reason 0

0 01:57:36.915 Script zip_arc104 GBPUSD,H1: removido