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

 
Vasiliy Sokolov:

Пресловутый кастинг структур ругается. Держите исправленную версию в аттаче.


Оперативно! Большое спасибо!

 
Vasiliy Sokolov:

Сейчас Вашу ошибку внимательно посмотрел -  та же ситуация с кастингом структур, но уже в другом контейнере - CDictionary. Замените Include\Dictionary.mqh на вариант приложенный внизу.

И да, под МТ4 все прекрасно работает и скажу больше CZip рабочая лошадка в моих проектах на МТ4.


Осталось вот это:

'm_array' - structures containing objects are not allowed Dictionary.mqh 306 25

 
Stanislav Korotky:

Осталось вот это:

'm_array' - structures containing objects are not allowed Dictionary.mqh 306 25


306 строку надо заменить на этот фрагмент:

#ifdef __MQL4__
int t_size = ArrayResize(temp_array, ArraySize(m_array));
for(int i = 0; i < t_size; i++)
   temp_array[i] = m_array[i];
#else
ArrayCopy(temp_array, m_array);
#endif

В аттаче Dictionary для МТ4

Файлы:
Dictionary.mqh  39 kb
 
Vasiliy Sokolov:

306 строку надо заменить на этот фрагмент:

В аттаче Dictionary для МТ4

Логично. Суперспасибо.

PS. Правда для файлов нулевой длины в архиве создается неверный заголовок (в примере ZipTask1) из-за чего они неизвлекаемы, но с этим уже можно разобраться - может быть это что-то в самом тесте.

 
Stanislav Korotky:

Логично. Суперспасибо.

PS. Правда для файлов нулевой длины в архиве создается неверный заголовок (в примере ZipTask1) из-за чего они неизвлекаемы, но с этим уже можно разобраться - может быть это что-то в самом тесте.

С нулевой длинной посмотрю что можно сделать.

 

Вот что не так? Не получается разжать файл zip.zip (скачанный с примера).




Лог.

18:25:47.809 Script zip_arc101 GBPUSD,H1: loaded successfully

0 18:25:47.830 zip_arc101 GBPUSD,H1: initialized

0 18:25:47.830 zip_arc101 GBPUSD,H1: Handle= 1   GetLastError= 0

0 18:25:47.830 zip_arc101 GBPUSD,H1: FileReadArray= 11004

0 18:25:47.830 zip_arc101 GBPUSD,H1: Zip.CreateFromCharArray= true

0 18:25:47.830 zip_arc101 GBPUSD,H1: Archive successfully loaded. Total files: 7

0 18:25:47.836 zip_arc101 GBPUSD,H1: Zip.UnpackZipArchive= false

0 18:25:47.837 zip_arc101 GBPUSD,H1: Zip.UnpackZipArchive= false

0 18:25:47.837 zip_arc101 GBPUSD,H1: Zip.UnpackZipArchive= false

0 18:25:47.837 zip_arc101 GBPUSD,H1: uninit reason 0

0 18:25:47.839 Script zip_arc101 GBPUSD,H1: removed

 
void OnStart()
  {
//---
   uchar zip_array[];
   
   ResetLastError();
   
   int Handle = FileOpen("zip.zip", FILE_READ|FILE_BIN|FILE_COMMON );
   
   
   Print("Handle= ", Handle, "   GetLastError= ", GetLastError() );
   
   
   Print("FileReadArray= ", FileReadArray(Handle, zip_array) );
   
   
   Print("Zip.CreateFromCharArray= ", Zip.CreateFromCharArray(zip_array) );
   
   
   printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
   
   
   Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive("NNN",FILE_COMMON) );
   
   Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive("",FILE_COMMON) );
   
   Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive("", 0) );
   
  }
//+------------------------------------------------------------------+
 

Метод CZip::UnpackZipArchive почему-то всегда возвращает false, хотя свою работу делает. Это баг. Проверяйте фактическую распаковку натурными наблюдениями.

 
Vasiliy Sokolov:

Метод CZip::UnpackZipArchive почему-то всегда возвращает false, хотя свою работу делает. Это баг. Проверяйте фактическую распаковку натурными наблюдениями.


Да. false но распаковка работает!

 

Вот еще проблема всплыла, если мне нужно в цикле распаковать несколько архивов подряд, меняя только год в названии.

Распаковывается только d2014.zip и все на этом.



0 01:57:36.772 Script zip_arc104 GBPUSD,H1: loaded successfully

0 01:57:36.807 zip_arc104 GBPUSD,H1: initialized

0 01:57:36.807 zip_arc104 GBPUSD,H1: --------------  DD\d2014.zip

0 01:57:36.815 zip_arc104 GBPUSD,H1: DD\d2014.zip   Zip.LoadZipFromFile= true

0 01:57:36.815 zip_arc104 GBPUSD,H1: Archive successfully loaded. Total files: 1

0 01:57:36.906 zip_arc104 GBPUSD,H1: Zip.UnpackZipArchive= false

0 01:57:36.906 zip_arc104 GBPUSD,H1: --------------  DD\d2015.zip

0 01:57:36.912 zip_arc104 GBPUSD,H1: DD\d2015.zip   Zip.LoadZipFromFile= true

0 01:57:36.912 zip_arc104 GBPUSD,H1: Archive successfully loaded. Total files: 1

1 01:57:36.912 zip_arc104 GBPUSD,H1: invalid pointer access in 'Zip.mqh' (407,28)

0 01:57:36.913 zip_arc104 GBPUSD,H1: uninit reason 0

0 01:57:36.915 Script zip_arc104 GBPUSD,H1: removed


Причина обращения: