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

 

Como usar essa biblioteca para realizar a tarefa de fazer o backup de arquivos:

Você precisa criar um arquivo no qual possa colocar em pastas

\MQL5\Experts\

\MQL5/Indicadores\

\MQL5/Include.

etc. ?

 
Alexandr Gavrilin #:

Como implementar essa tarefa de backup de arquivos usando essa biblioteca:

Você precisa criar um arquivo no qual possa distribuir os arquivos em pastas

\MQL5\Experts\

\MQL5/Indicadores\

\MQL5\Include\

etc. ?

Aqui está um bom exemplo.

MQL5 Program Packer
MQL5 Program Packer
  • www.mql5.com
This is MQL5 project packer: assemble all source and resource files from dependencies into a single ZIP.
 
fxsaber #:

Aqui está um bom exemplo.

Obrigado, vou estudá-lo. Estou cansado de fazer atualizações periódicas de arquivos em diferentes arquivos para os clientes. Consome muito tempo e precisa de automação.

 
fxsaber #:

Aqui está um bom exemplo.

Obrigado, funciona!


Adendo.

Não é possível empacotar arquivos ex5 e ex4, e preciso lançá-los exatamente.

Aqui está um script de teste com base no script proposto. O mq5 é lançado sem problemas; se a resolução do menu for ex5, todos os erros de nome de arquivo errado serão 5002.

//+------------------------------------------------------------------+
//|UpdateShop.mq5
//|Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

// #define UNICODE_WARNING
#include <mql5/FileReader.mqh>
#include <Zip/Zip.mqh>
string sdir="MQL5/Experts/trading-shop.ru/";

string filelist[]=
  {
   "sovetnikov.net/WSO EA.mq5",
   "sovetnikov.net/SN Liza EA.mq5"
  };


CZip Zip;      // Criar arquivo zip vazio.

//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int added=0;
   string listing="";
   for(int i=0; i<ArraySize(filelist); i++)
     {
      string name=sdir+filelist[i];

      CZipFile *file = new CZipFile();
      if(!file.AddFile(name)
         || !Zip.AddFile(file))
        {
         delete file;
        }
      else
        {
         added++;
         Print(" + "+name);
        }

     }

   if(added>0)
     {
      //criar o catálogo

      /salvar o arquivo em um arquivo
      const string archive = "MQL5/Files/Test.zip";
      if(Zip.SaveZipToFile(archive))
        {
         Print("Packed file saved: ", archive);
        }
     }
  }
//+----------------------------------------------------------------
Mais uma vez, obrigado aos desenvolvedores pela segurança de trabalhar com arquivos..... mais uma vez, outra muleta para fazer.
 

Olá,

Tenho um arquivo ZIP com um arquivo CSV nele.
Como ler esse arquivo em uma string. (Sem salvar no disco e ler do disco)

 
Forester #:

Olá,

Tenho um arquivo ZIP com um arquivo CSV nele.
Como ler esse arquivo em uma string. (Sem salvar no disco e ler do disco)

https://www.mql5.com/pt/articles/1971

Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
  • www.mql5.com
Язык MQL5 развивается, и в него постоянно добавляются новые функции для работы с данными. С некоторых пор, благодаря нововведениям, стало возможно работать с ZIP-архивами штатными средствами MQL5 без привлечения сторонних библиотек DLL. Данная статья подробно описывает, как это делается, на примере описания класса CZip — универсального инструмента для чтения, создания и модификации ZIP-архивов.
 

Este é o tópico de discussão do artigo que você mencionou. Vi apenas a possibilidade de fazer upload do ZIP para uma pasta no disco. Mas eu gostaria de fazer o upload em uma linha de uma só vez.

 

Se alguém precisar, aqui está um script pronto para ler o arquivo em uma linha.

Faça o download da pasta ZIP e do Dictionary.mqh aqui https://www.mql5.com/en/code/27955 - eles funcionam.

#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link      "https://www.mql5.com"
#property version   "1.00"

int is_common=1;

#include <Zip\Zip.mqh>

CZip Zip;

void OnStart(){
   string filenames[]; if(FileSelectDialog("Selecione os arquivos para download"., "CSV/", "CSV files (*.csv)|*.csv;*.zip|ZIP files (*.zip)|*.zip|All files (*.*)|*.*", FSD_ALLOW_MULTISELECT|(is_common?FSD_COMMON_FOLDER:0), filenames, "data.txt")>0){int total=ArraySize(filenames);for(int i=0; i<total; i++){Print(i, ": ", filenames[i]);}} else{Print("Files not selected");}

   bool res=Zip.LoadZipFromFile(filenames[0],FILE_COMMON);//считать 0й файл из выбранных
   if(!res) {
      uint last_error=GetLastError();
      if(last_error<ERR_USER_ERROR_FIRST){printf("Ocorreu um erro de sistema durante o download do arquivo. Número do erro: "+(string)last_error);}
      else {  ENUM_ZIP_ERROR error=(ENUM_ZIP_ERROR)(last_error-ERR_USER_ERROR_FIRST); printf("Ocorreu um erro no processamento do arquivo no momento de seu download: "+EnumToString(error));}
      return;
   }
   
   CZipFile* content = Zip.ElementAt(0);//ler o arquivo número 0 no arquivo
   uchar file_content[];
   content.GetUnpackFile(file_content);// descompactá-lo na matriz file_content

   string  s = CharArrayToString(file_content,0,-1,CP_UTF8);//CP_ACP
   
   string sa[];
   int k=StringSplit(s,'\n',sa);//--- dividir a string em substrings
   for(int i=0;i<k;i++){
      PrintFormat("result[%d]=\"%s\"",i,sa[i]);
   }
}
MQL5 Program Packer
MQL5 Program Packer
  • www.mql5.com
This is MQL5 project packer: assemble all source and resource files from dependencies into a single ZIP.
 
Em geral, seria bom adicionar funções de arquivamento ao próprio terminal. A julgar pela discussão, os arquivos param de ser compilados regularmente.
 
Alguma atualização sobre isso? Estou encontrando erros em

'ZipLocalHeaderOpen' tem construtor e não pode ser usado como membro de união ZipHeader.mqh 52 23