文章 "单纯使用 MQL5 语言处理 ZIP 档案" - 页 7

 

如何使用该库来完成备份文件的任务:

你需要创建一个归档文件,并将其放入文件夹中

\MQL5\Experts\

\MQL5/指示器

\MQL5/Include。

等等。?

 
Alexandr Gavrilin #:

如何使用该库实现文件备份任务:

您需要创建一个存档,将文件分散到文件夹中

\MQL5\Experts\

\MQL5/指标

\MQL5(包括

等等?

这里有一个 很好的例子。

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

这里有 一个很好的例子。

谢谢,我会好好研究的。我厌倦了向客户定期更新不同档案中的文件。耗费大量时间,需要自动化。

 
fxsaber #:

这里有 一个很好的例子。

谢谢,它能用!


补遗。

您不能打包 ex5、ex4 文件,我需要准确地扔掉它们。

mq5 丢出没有问题,如果菜单分辨率为 ex5,则所有错误的文件名都是 5002。

//+------------------------------------------------------------------+
//|UpdateShop.mq5
//|2021 年 MetaQuotes 有限公司版权所有。|
//|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;      // 创建空压缩包。

//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
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)
     {
      //创建目录

      //将存档保存到文件中
      const string archive = "MQL5/Files/Test.zip";
      if(Zip.SaveZipToFile(archive))
        {
         Print("Packed file saved: ", archive);
        }
     }
  }
//+----------------------------------------------------------------
再次感谢开发人员为使用文件..... 的安全性所做的努力。再次制作另一个拐杖。
 

您好、

我有一个 ZIP 压缩包,里面有一个 CSV 文件。
如何将该文件读成字符串?(在不保存到磁盘和从磁盘读取的情况下)

 
Forester #:

你好

我有一个 ZIP 压缩包,里面有一个 CSV 文件。
如何将该文件读成字符串?(在不保存到磁盘和从磁盘读取的情况下)

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

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

这是您提到的文章的讨论主题。我只看到可以将 ZIP 上传到光盘上的文件夹。但我想一次性上传到一行。

 

如果有人需要,这里有一个用于在一行中读取归档文件的现成脚本。

请在此处下载 ZIP 文件夹和 Dictionary.mqhhttps://www.mql5.com/en/code/27955- 它们可以工作。

#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("选择要下载的文件"。, "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("下载存档时发生系统错误。错误编号:"+(string)last_error);}
      else {  ENUM_ZIP_ERROR error=(ENUM_ZIP_ERROR)(last_error-ERR_USER_ERROR_FIRST); printf("下载存档时处理过程中出现错误:"+EnumToString(error));}
      return;
   }
   
   CZipFile* content = Zip.ElementAt(0);//读取档案中的 0 号文件
   uchar file_content[];
   content.GetUnpackFile(file_content);// 将其解压缩到文件内容数组中

   string  s = CharArrayToString(file_content,0,-1,CP_UTF8);//CP_ACP
   
   string sa[];
   int k=StringSplit(s,'\n',sa);//--- 将字符串分割成子串
   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.
 
总的来说,在终端本身添加归档功能会很好。从讨论的情况来看,文件经常会停止编译。
 
有什么最新进展吗?我遇到了错误

ZipLocalHeaderOpen' 有构造函数,不能用作联合成员 ZipHeader.mqh 52 23