Обсуждение статьи "Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек"
Кто нибудь тестировал код ? В мт 4 Работает ?
Впечатляющее сжатие исторических данных вместе с рассмотренной идеей применения его к содержимому оперативной памяти позволяют предположить, что есть надежда на радикальное сокращение требуемых терминалу MT5 ресурсов памяти. Случится это?
Пресловутый кастинг структур ругается. Держите исправленную версию в аттаче.
'm_array' - structures containing objects are not allowed Dictionary.mqh 252 25 cannot cast 'DoubleValue' to 'ULongValue' Dictionary.mqh 209 14
А под МТ4 должно работать? У меня такая ситуация.
#property striсt помогает?
В новой версии по мимо union еще добавлен дополнительный механизм извлечения структур данных из архива, если поля структур не заполнены. (Было замечено, что продукты Microsoft плюют на стандарт с высокой башни и просто не заполняют поля вроде "размер файла"). Новая версия теперь работает с такими проблемными архивами.
Я уже добавил новую версию в архив к статье. Кажется ее уже обновили, поэтому можете скачивать аттач к статье.
А под МТ4 должно работать? У меня такая ситуация.
Сейчас Вашу ошибку внимательно посмотрел - та же ситуация с кастингом структур, но уже в другом контейнере - CDictionary. Замените Include\Dictionary.mqh на вариант приложенный внизу.
И да, под МТ4 все прекрасно работает и скажу больше CZip рабочая лошадка в моих проектах на МТ4.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек:
Язык MQL5 развивается, и в него постоянно добавляются новые функции для работы с данными. С некоторых пор, благодаря нововведениям, стало возможно работать с ZIP-архивами штатными средствами MQL5 без привлечения сторонних библиотек DLL. Данная статья подробно описывает, как это делается, на примере описания класса CZip — универсального инструмента для чтения, создания и модификации ZIP-архивов.
Однажды автора данной статьи привлекла интересная особенность функции CryptDecode, а именно — возможность распаковывать переданный ей ZIP-массив. Этот модификатор был введен разработчиками торговой платформы MetaTrader 5 для того, чтобы можно было распаковывать ответ некоторых серверов, используя стандартную функцию WebRequest. Однако из-за некоторых особенностей формата ZIP-файла, использовать ее напрямую было невозможно.
Требовалась дополнительная аутентификация: для распаковки архива необходимо знать его хеш-сумму до упаковки: Adler-32, которой, естественно, не было. Однако, при обсуждении этой проблемы, разработчики пошли навстречу и перегрузили CryptDecode и CryptEncode, ее зеркального близнеца, специальным флагом, игнорирующим хеш Adler32 при распаковке переданных данных. Для неискушенных в техническом плане пользователей это нововведение можно объяснить просто: благодаря ему стала возможной полнофункциональная работа с ZIP-архивами. Эта статья подробно описывает формат ZIP-файла, особенности хранения данных в нем и предлагает для работы с архивом удобный объектно-ориентированный класс CZip.
Каждый ZIP-архив — это бинарный файл, содержащий упорядоченную последовательность байтов. С другой стороны, в ZIP-архиве каждый файл имеет имя, атрибуты (например время модификации файла) и другие свойства, которые мы привыкли видеть в файловой системе любой операционной системы. Поэтому, помимо запакованных данных, каждый ZIP-архив хранит имя запакованного файла, его атрибуты и другую служебную информацию. Эта служебная информация располагается в строго определенном порядке и имеет регулярную структуру. Например, если в архиве содержатся два файла (File#1 и File#2), то архив будет иметь следующую схему:
Рис. 1. Схематичное представление ZIP-архива, содержащего два файла: File#1 и File#2
Автор: Vasiliy Sokolov