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

 

Script

#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:

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

Apenas o arquivo d2014.zip é descompactado e é isso.

Tente limpar o arquivo após a descompactação.

#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();

      }
  }
 

SIM!!!

Fico feliz que eu mesmo tenha percebido isso e decidido escrever uma solução :))),

e há uma resposta imediata :))))

Obrigado!

 

crédito ao autor pela biblioteca !!!

resultados para comparação:


1. .bin - os dados são gravados redefinindo para o formato binário, um a um, os dados da estrutura e dos objetos de classe

2. .dat - os dados são primeiro convertidos em uma matriz BYTE e, em seguida, despejados no disco como dados binários

3. .zip - método 2 + compressão de software

Registro dos estágios de processamento de criação, gravação e leitura sem compressão e com compressão:

após cada leitura de dados dos arquivos, é realizada uma verificação da exatidão dos dados originais; nenhum erro é detectado ))
 
A biblioteca "flutuou" com a nova compilação 1816 (( Aparentemente, eles removeram um bug na união e agora ela desaprova o uso de um objeto de estrutura com um construtor na união.
 
Konstantin:
A biblioteca "flutuou" com a nova compilação 1816 (( Aparentemente, eles removeram um bug na união e agora ela desaprova o uso de um objeto de estrutura com um construtor na união

Recomendo recusar o uso de um construtor para estruturas que participam da união

Em vez de construtores, é melhor usar a função Initialise/Init.

De nossa parte, um dia adicionaremos a capacidade de usar estruturas com construtores na união, desde que a união tenha um construtor explícito/usuário. Portanto, a forma e a ordem de construção ficarão a cargo do usuário/criador.

Mas não podemos dizer quando (Resposta do desenvolvedor)
 
Rashid Umarov:

Recomendo não usar o construtor para estruturas que participam da união

Em vez de construtores, é melhor usar a função Initialise/Init.

De nossa parte, um dia adicionaremos a capacidade de usar estruturas com construtores na união, desde que essa união tenha um construtor explícito/definido pelo usuário. Portanto, a forma e a ordem de construção ficarão a cargo do usuário/criador.

Mas não podemos dizer quando (Resposta do desenvolvedor).

Não faz sentido mudar isso, eu já enviei ao desenvolvedor uma classe reprojetada sem construtores nas estruturas, apenas adicionei o método Init para inicialização das estruturas e isso é tudo, basta corrigir o problema com os certificados no Linux, porque ele é muito incompleto))

 
Correções no arquivo de cabeçalho da biblioteca.
Arquivos anexados:
ZipHeader.mqh  13 kb
 
Rashid Umarov:

Recomendo não usar o construtor para estruturas que participam da união

Em vez de construtores, é melhor usar a função Initialise/Init.

De nossa parte, um dia adicionaremos a capacidade de usar estruturas com construtores na união, desde que essa união tenha um construtor explícito/definido pelo usuário. Portanto, a forma e a ordem de construção ficarão a cargo do usuário/criador.

Mas não podemos dizer quando poderemos fazer isso (resposta do desenvolvedor).

Acho que você está claramente no negócio errado. Havia uma conversão explícita de estruturas - então, por algum motivo, eles a removeram e decidiram que a união "type pun" é, de alguma forma, melhor do que a conversão explícita. Em seguida, o construtor de estrutura começou a interferir na união. Eles também o baniram. Agora estão planejando permitir novamente... Mas suas ações fazem com que muitos códigos no CodeBase não sejam compilados agora. Mas essas inovações não resolvem nenhum problema.

 
Código-fonte do CZip corrigido para compatibilidade com versões mais recentes do compilador. As atualizações estarão disponíveis após a verificação por um moderador.