Как извлечь файл из папки zip?

 
Можно ли извлечь файл из папки zip программным способом? Есть сжатый файл txt в папке Files\MQL4. Нужно извлечь файл txt в папку  Files\MQL4.
 
Благодарю 
 

Чем вызвана ошибка в CryptDecode?  Подобран неверный ключ шифрования?  Описание ошибки: "internal error- внутренняя ошибка".

 
//+------------------------------------------------------------------+
//|                                                       update.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <stdlib.mqh> 
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie=NULL,headers;
   char post[],result[];
   int res,filehandle;
//--- для работы с сервером необходимо добавить URL "https://www.cftc.gov/files/dea/history/deacot2016.zip"  
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"): 
   string google_url="http://www.cftc.gov/files/dea/history/deacot2016.zip";
// string google_url="http://www.cftc.gov/files/dea/history/deahistfo2016.zip";
//--- обнуляем код последней ошибки 
   ResetLastError();
//--- загрузка 
   int timeout=5000; //--- timeout менее 1000 (1 сек.) недостаточен при низкой скорости Интернета 
   res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
//--- проверка ошибок 
   if(res==-1)
     {
      Alert("Ошибка в WebRequest. Описание ошибки: ",ErrorDescription(GetLastError()));
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления 
      MessageBox("Необходимо добавить адрес '"+google_url
                 +"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      //--- успешная загрузка 
      Alert("Файл успешно загружен, Размер файла =%d байт.",ArraySize(result));
      if(3==4)
        {
         //--- сохраняем данные в файл zip
         filehandle=FileOpen("deacot2016.zip",FILE_WRITE|FILE_BIN);
         // int filehandle=FileOpen("deahistfo2016.zip",FILE_WRITE|FILE_BIN);
         //--- проверка ошибки 
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл zip
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл 
            FileClose(filehandle);
           }
         else Alert("Ошибка в FileOpen/zip. Описание ошибки: ",ErrorDescription(GetLastError()));
        }
     }

//--- unpacking
   uchar key[]={1,0,0,0};
   uchar data[];
   int i=CryptDecode(CRYPT_ARCH_ZIP,result,key,data);
//--- checking errors   
   if(i==0)
     {
      Alert("Ошибка в CryptDecode. Описание ошибки: ",ErrorDescription(GetLastError()));
      return;
     }
   else Alert("i = ",i,"  size of data = ",ArraySize(data));

//--- сохраняем данные в файл txt
   filehandle=FileOpen("z.txt",FILE_WRITE|FILE_TXT);
//--- проверка ошибки 
   if(filehandle!=INVALID_HANDLE)
     {
      //--- сохраняем содержимое массива data[] в файл txt
      FileWriteArray(filehandle,data,0,ArraySize(data));
      //--- закрываем файл 
      FileClose(filehandle);
     }
   else Alert("Ошибка в FileOpen/txt. Описание ошибки: ",ErrorDescription(GetLastError()));
  }
//+------------------------------------------------------------------+
 
вроде все сделал правильно..
Причина обращения: