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

 

脚本

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

另一个问题是,如果我需要循环解压多个压缩包,只更改名称中的年份。

只有 d2014.zip 被解压,仅此而已。

试着在解压后清除压缩包。

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

      }
  }
 

是的

我很高兴我自己意识到了这一点,并决定写一个解决方案:)))、

并得到了及时回复 :))))

谢谢!

 

归功于作者的图书馆!!!

比较结果


.bin - 数据是通过将结构和类对象中的数据逐一重置为二进制格式写入的。

.dat - 首先将数据转换为 BYTE 数组,然后将其作为二进制数据转储到磁盘中。

.zip - 方法 2 + 软件压缩

在未压缩和已压缩的情况下,创建、写入和读取处理阶段的日志:

每次从文件中读取数据后,都要与原始数据进行正确性检查,未发现任何错误 ))
 
在新的 1816 版本中,程序库 "浮动 "了()。显然,他们删除了联合程序中的一个错误,现在它不允许在联合程序中使用带有构造函数的结构对象。
 
Konstantin:
在新的 1816 版本中,库 "浮动 "了()。显然,他们删除了联合库中的一个错误,现在它不允许在联合库中使用带有构造函数的结构对象。

我建议拒绝为参与联合的结构对象使用构造函数

与其使用构造函数,不如使用Initialise/Init 函数

就我们而言,有朝一日我们将添加在联合体中使用带有构造函数的结构的功能,前提是联合体具有显式/用户构造函数。因此,构造的方式和顺序将取决于用户/创建者的意愿。

但我们无法确定具体时间(开发人员回复)
 
Rashid Umarov:

我建议不要对参与联合的结构使用构造函数

与其使用构造函数,不如使用 Initialise/Init 函数。

就我们而言,有朝一日我们将添加在联合结构中使用带有构造函数的结构的功能,前提是联合结构具有显式/用户定义的构造函数。因此,构造的方式和顺序将取决于用户/创建者的意愿。

但我们不能说什么时候(开发者回复)。

没有必要修改,我已经给开发人员发了一个重新设计的类,只是没有结构体的构造函数,只是增加了结构体初始化的 Init 方法,仅此而已,你只需解决 Linux 下证书的问题,因为它太不完整了 ))

 
修正库头文件。
附加的文件:
ZipHeader.mqh  13 kb
 
Rashid Umarov:

我建议不要对参与联合的结构使用构造函数

与其使用构造函数,不如使用 Initialise/Init 函数。

就我们而言,有朝一日我们将添加在联合结构中使用带有构造函数的结构的功能,前提是联合结构具有显式/用户定义的构造函数。因此,构造的方式和顺序将取决于用户/创建者的意愿。

但我们也说不准什么时候能做到这一点(开发人员回复)。

我认为你们显然是搞错了。结构体本来是可以显式转换的,但不知出于什么原因,他们取消了这种转换,并认为 "类型双关 "联合比显式转换更好。然后,结构构造函数开始干扰联合。他们也禁止了它。现在你们又打算允许它了......但你们的行为导致 CodeBase 中的许多代码现在无法编译。但这些创新并不能解决任何问题。

 
更正了 CZip 源代码,以便与较新版本的编译器兼容。更新将在版主核实后提供。