Diskussion zum Artikel "Die Arbeit mit ZIP-Archiven in MQL5 ohne Bibliotheken von Drittanbietern" - Seite 2

 
Vasiliy Sokolov:

Der berüchtigte Guss von Strukturen ist das Fluchen. Behalten Sie die korrigierte Fassung im Anhang.


Prompt! Herzlichen Dank!

 
Vasiliy Sokolov:

Jetzt habe ich mir Ihren Fehler genau angeschaut - die gleiche Situation mit Struktur-Casting, aber in einem anderen Container - CDictionary. Ersetzen Sie Include\Dictionary.mqh durch die unten angehängte Variante.

Und ja, alles funktioniert gut unter MT4 und ich werde mehr CZip ist ein Arbeitspferd in meinen Projekten auf MT4 sagen.


Was bleibt, ist dies:

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

 
Stanislav Korotky:

Was bleibt, ist dies:

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


Zeile 306 sollte durch dieses Fragment ersetzt werden:

#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

Im beigefügten Wörterbuch für MT4

Dateien:
Dictionary.mqh  39 kb
 
Vasiliy Sokolov:

Zeile 306 sollte durch dieses Fragment ersetzt werden:

Im beigefügten Wörterbuch für MT4.

Das macht Sinn. Super Dank.

PS. Es stimmt, dass bei Dateien mit einer Länge von Null im Archiv ein falscher Header erzeugt wird (im Beispiel ZipTask1), wodurch sie nicht wiederherstellbar sind, aber das lässt sich beheben - vielleicht liegt es ja am Test selbst.

 
Stanislav Korotky:

Das macht Sinn. Vielen Dank.

PS. Es stimmt, dass bei Dateien mit einer Länge von Null im Archiv ein ungültiger Header erzeugt wird (im ZipTask1-Beispiel), was sie unauffindbar macht, aber das lässt sich beheben - vielleicht ist es etwas im Test selbst.

Ich werde sehen, was ich mit der Nulllänge machen kann.

 

Hier ist, was falsch ist? Ich kann die Datei zip.zip (heruntergeladen aus dem Beispiel) nicht entpacken.




Log.

18:25:47.809 Script zip_arc101 GBPUSD,H1: erfolgreich geladen

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

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: Archiv erfolgreich geladen. Dateien insgesamt: 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 Grund 0

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

 
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) );
   
  }
//+------------------------------------------------------------------+
 

Die Methode CZip::UnpackZipArchive gibt aus irgendeinem Grund immer false zurück, obwohl sie ihre Aufgabe erfüllt. Dies ist ein Fehler. Überprüfen Sie das tatsächliche Entpacken durch Feldbeobachtungen.

 
Vasiliy Sokolov:

Die Methode CZip::UnpackZipArchive gibt aus irgendeinem Grund immer false zurück, obwohl sie ihre Aufgabe erfüllt. Dies ist ein Fehler. Überprüfen Sie das tatsächliche Entpacken durch Beobachtung.


Ja. Falsch, aber das Entpacken funktioniert!

 

Hier ist ein weiteres Problem, wenn ich mehrere Archive in einer Schleife entpacken muss und dabei nur das Jahr im Namen ändere.

Nur d2014.zip wird entpackt und das war's.



0 01:57:36.772 Script zip_arc104 GBPUSD,H1: erfolgreich geladen

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

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: Archiv erfolgreich geladen. Dateien insgesamt: 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: Archiv erfolgreich geladen. Dateien insgesamt: 1

1 01:57:36.912 zip_arc104 GBPUSD,H1: Ungültiger Zeigerzugriff in 'Zip.mqh' (407,28)

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

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