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

 
你好,瓦西里!情况如下:我从 OANDA 下载了一本订单位置书,它们是用 API v.2 包装的,当我尝试用 CZip 解压缩时,我得到了以下消息:"在加载时存档处理出错:ZIP_ERROR_BAD_FORMAT_ZIP"。我不知道它到底装了什么,但 WinZip 展开了接收到的文件。文件附后,以防万一。
附加的文件:
oanda_data.txt  85 kb
 
存档文件无法附上,如果您需要,我可以发送到您的邮箱。
 
我下载了压缩包,压缩包中有几个文件。我尝试解压缩,但没有任何效果。我查看了代码,发现了这个片段:
//+------------------------------------------------------------------+
//|| 解压当前 zip 内容并将其保存为磁盘文件。
//+------------------------------------------------------------------+
bool CZipContent::UnpackOnDisk(string folder, int file_common)
{
   return false;   
}


我知道解压缩不起作用?
 
Alexey Oreshkin:
我查看了代码,发现以下片段:

也就是说,我正确地理解为解压缩不起作用?

在调试模式下查看代码,就会找到正确的片段。解压缩是有效的 - 我每天都在使用它。

 
Alexey Oreshkin:
我下载了压缩包,压缩包中有几个文件。我试图解压缩,但没有任何效果。 查看了代码,发现了这样一个片段:
所以我正确地理解为解压缩不起作用?

不,不是这样的。仔细看,UnpackOnDisk 是一个虚拟方法。它在抽象类 Content 中没有实现。不幸的是,MQL 不允许创建没有实现的虚拟方法,所以你必须设置像你发现的这样的拦截器。将文件保存到磁盘的真正工作是由 CZipFile::UnpackOnDisk 和 CZipDirectory::UnpackOnDisk 完成的。这是因为在磁盘上创建目录和创建文件是不同的操作,因此它们由不同的方法完成。

 
M24:
存档文件无法附上,如果您需要,我会发送到您的邮箱。

这其实是最重要的。首先,请确保您使用的是最新版本的 CZip,然后重新解压缩。

 
fxsaber:

在调试模式下查看代码,就能找到必要的部分。解压缩很有效,我每天都在用。

那我到底做错了什么?这是我的代码:

   Zip.LoadZipFromFile("info.zip",FILE_COMMON);
   Zip.UnpackZipArchive("",FILE_COMMON);

我希望在公共文件夹中看到所有解压文件,但它是空的。我不需要其他东西。公共文件夹中有 info.zip。

 
Alexey Oreshkin:

那我到底做错了什么?以下是我的代码:

我希望在公共文件夹中看到所有解压文件,但它是空的。我不需要其他任何东西。公共文件夹中有 info.zip。

你必须指定文件夹,因为双引号 会出错。

 
fxsaber:

您必须指定一个文件夹,因为双引号 会出错。

老实说,没有任何变化:

   Zip.LoadZipFromFile("info.zip",FILE_COMMON);
   Zip.UnpackZipArchive("Test",FILE_COMMON);

结果也是空的。


p.s. 我从文章中举了个例子

   string cookie,headers;
   string mql_url="https://www.mql5.com/zh/code/download/9";
   int timeout=5000;
   uchar data[],zip_array[];
   if(!WebRequest("GET",mql_url,cookie,NULL,timeout,data,0,zip_array,headers))
     {
      printf("Unable to download ZIP archive from "+mql_url+". Check request and permissions EA.");
      return;
     }
   if(!Zip.CreateFromCharArray(zip_array))
     {
      printf("Loaded bad ZIP archive. Check results array.");
      return;
     }
   printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
   Zip.UnpackZipArchive("Alligator",FILE_COMMON);

我更改了网址(在终端设置中允许访问),结果也是零。我本以为能把解析器从夏普转移到这里,但看来不行。我费了好大劲才把文件解压出来,结果什么都没有(......)。

 
Alexey Oreshkin:

老实说,一切都没变:

结果也是零。

#include <Zip\Zip.mqh> //https://www.mql5.com/zh/articles/1971

void OnStart()
{
  CZip Zip;

  Zip.LoadZipFromFile("Test.zip", FILE_COMMON);
  Zip.UnpackZipArchive("Temp", FILE_COMMON);
}
附加的文件:
Test.zip  151 kb