記事"MQL5でのZIPアーカイブの扱い"についてのディスカッション - ページ 3

 

スクリプト

#include <Zip\Zip.mqh>
CZip Zip;


void OnStart()
  {
//---
   string pathdir = "DD\\";

   for(int yy2 = 2014; yy2 <= 2017; yy2++)
      {
         string FileArc = pathdir + "d" + IntegerToString(yy2) + ".zip";
         
         Print("--------------  ", FileArc);
         
         Print(FileArc, "   Zip.LoadZipFromFile= ", Zip.LoadZipFromFile(FileArc, 0) );
         
                    
         printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
         
         Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive(pathdir + "H" + IntegerToString(yy2), 0) );

      }
  }
 
Dmytro Zelenskyy:

ここでもう一つ問題がある。複数のアーカイブをループで解凍する必要がある場合、名前の年だけを変更する必要がある。

d2014.zipだけが解凍されてしまいます。

解凍後にアーカイブをクリアしてみてください。

#include <Zip\Zip.mqh>
CZip Zip;


void OnStart()
  {
//---
   string pathdir = "DD\\";

   for(int yy2 = 2014; yy2 <= 2017; yy2++)
      {
         string FileArc = pathdir + "d" + IntegerToString(yy2) + ".zip";
         
         Print("--------------  ", FileArc);
         
         Print(FileArc, "   Zip.LoadZipFromFile= ", Zip.LoadZipFromFile(FileArc, 0) );
         
                    
         printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
         
         Print("Zip.UnpackZipArchive= ", Zip.UnpackZipArchive(pathdir + "H" + IntegerToString(yy2), 0) );
         Zip.Clear();

      }
  }
 

そうなんです!

自分で気づいて、解決策を書くことにしてよかった :)))、

そして、早速のお返事 :)))))

ありがとうございます!

 

ライブラリーのクレジットは著者に!

比較の結果


1. .bin - 構造体やクラスオブジェクトのデータを1つずつバイナリ形式にリセットして書き込む。

2. .dat - データをまずBYTE配列に変換し、バイナリデータとしてディスクにダンプする。

3. .zip - 方法2 + ソフトウェア圧縮

圧縮なしと圧縮ありの作成、書き込み、読み取りの処理段階のログ:

ファイルからデータを読み出すたびに、元のデータとの整合性のチェックが行われ、エラーは検出されなかった ))
 
新しいビルド1816でライブラリが "浮いた"(( どうやらユニオンのバグを取り除いたようで、ユニオンのコンストラクタで構造体オブジェクトを使うのを嫌がるようになった。
 
Konstantin:
新しいビルド1816でライブラリが "浮いた"(( どうやらunionのバグを取り除いたようで、unionでコンストラクタを持つ構造体オブジェクトの使用を嫌がるようになった。

私は、unionに参加する構造体にコンストラクタを使わないことを推奨する。

コンストラクタの代わりにInitialise/Init関数を 使うのがよい。

私たちとしては、unionに明示的/ユーザー・コンストラクタがある場合に限り、コンストラクタを持つ構造体をunionで使用する機能をいつか追加するつもりです。つまり、構築の方法や順序は、ユーザーや作成者の良心に委ねられることになる。

しかし、いつとは言えません。
 
Rashid Umarov:

ユニオンに参加する構造体にはコンストラクタを使用しないことをお勧めします。

コンストラクタの代わりに、Initialise/Init関数を使用することをお勧めします。

私たちとしては、ユニオンに明示的/ユーザー定義コンストラクタがあれば、いつかコンストラクタを持つ構造体をユニオンで使えるようにする予定です。つまり、コンストラクタの作り方や順番は、ユーザーや作成者の良心に委ねられることになる。

しかし、いつとは言えません(開発者の回答)。

構造体のコンストラクタをなくし、構造体の初期化のための Init メソッドを追加しただけです。)

 
ライブラリーヘッダーファイルの修正。
ファイル:
ZipHeader.mqh  13 kb
 
Rashid Umarov:

ユニオンに参加する構造体にはコンストラクタを使用しないことをお勧めします。

コンストラクタの代わりに、Initialise/Init関数を使用することをお勧めします。

私たちとしては、ユニオンに明示的/ユーザー定義コンストラクタがあれば、いつかコンストラクタを持つ構造体をユニオンで使えるようにする予定です。つまり、コンストラクタの作り方や順序は、ユーザーや作成者の良心に委ねられることになる。

しかし、いつできるようになるかはわかりません(開発者の回答)。

明らかに間違ったビジネスをしていると思う。構造体には明示的なキャストがあった。その後、何らかの理由でそれを削除し、明示的なキャストよりも「タイプ・パン」ユニオンの方がどうにかマシだと判断したのだ。その後、構造体コンストラクタがユニオンの邪魔をし始めた。それも禁止された。そして今、またそれを許可しようとしている。しかし、あなたの行動のせいで、CodeBaseの多くのコードがコンパイルできなくなった。しかし、これらの革新は何の問題も解決しない。

 
新しいバージョンのコンパイラとの互換性のために CZip のソースコードを修正しました。モデレータによる検証の後、アップデートが利用可能になります。