Обсуждение статьи "Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек" - страница 5

 
Доброго времени суток, Василий! Ситуация такая: скачиваю с ОАНДЫ книгу ордеров-позиций, в API v.2 они приезжают в упакованном виде, при попытке развернуть через CZip пишет: "Возникла ошибка обработки архива в момент его загрузки: ZIP_ERROR_BAD_FORMAT_ZIP". Я не знаю точно, чем оно упаковано, но WinZip полученный файл разворачивает. Файлы, на всякий случай, прилагаю.
Файлы:
oanda_data.txt  85 kb
 
Файл архива прикрепить не удалось, если он будет нужен вышлю на почту.
 
Скачал зип, В архиве несколько файлов. Пытаюсь разархивировать и ничего не получается. Смотрю код и прихожу к такому фрагменту:
//+------------------------------------------------------------------+
//| Unpack current zip content and save it as file on disk.          |
//+------------------------------------------------------------------+
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);

результат также нулевой.


п.с. Взял пример из статьи

   string cookie,headers;
   string mql_url="https://www.mql5.com/ru/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);

Поменял url (в настройках терминала разрешил доступ) и всё, результат также нулевой. Думал перенесу парсер с шарпа сюда и видать нет. Столько телодвижений чтобы просто разархивировать файл и бестолку (

 
Alexey Oreshkin:

Честно сказать ничего не поменялось:

результат также нулевой.

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

void OnStart()
{
  CZip Zip;

  Zip.LoadZipFromFile("Test.zip", FILE_COMMON);
  Zip.UnpackZipArchive("Temp", FILE_COMMON);
}
Файлы:
Test.zip  151 kb