2014/10/22

10/22/2014
 Windows上で動作するプログラムを作っていると、データを圧縮して保存しておきたいことありますよね。
 また、クリックするだけで事前にしておいたファイルをバックアップするような便利な方法が無いかと思われている方も多いのではないでしょうか?
 ズバリ、Windowsの標準機能で、zipファイルにバックアップする方法はあります。
 操作上の手続きとしては、エクスプローラで圧縮対象を選択してマウス右クリックで表示されるポップアップメニューより、送付先にzipファイルを指定すれば、圧縮がなされます。
 この操作、WindowsXp以降のバージョンであれば、標準として搭載している機能です。

 で、とりあえず、操作をするなら上記方法で出来るのですが、事前に設定しておいたものをバックアップすることは無いのかなぁと....

 VBScriptという簡単なプログラミング言語を使用し、エクスプローラ内蔵のapiを利用してzipファイルを作成することが可能です。
 次のURLで公開されている方がいらっしゃいます。

  BAT+VBSでのファイルZIP化


 この手法は、公表されている方多々居らっしゃるのですが、いかんせん、zip圧縮完了が完全にはわからないという問題があります。
 簡単にいうと、先の手法を10回ループしたとしますと、先に実行したzipが終了がわからないので、その次のzip処理が開始されファイル更新の奪い合いで異常終了することがあります。

 エクスプローラ内蔵のzip機能を外部から制御における問題は、マイクロソフトのページでも公表されています。

CopyHereメソッドからzipファイルを処理することはできません。

 で、どうしましょうということですが、まず、BAT+VBSによるサンプルで、スクリプトとして実行するのは問題無いでしょう。(続けて連続実行することなんてないでしょうから)

 しかし、プログラムに組み込むのは問題でしょう。
 マイクロソフト社では、こちらのhttp://dotnetzip.codeplex.com/ DLLを利用するようにアナウンスしています。
 この機能は、Office系のVBA からもVB6からも、.netVBからも使えますので、良さそうな気がするのですが、VBAとVB6からの使用では、ファイル名エンコード機能の関係から、日本語ファイル名のファイルが圧縮出来ません。圧縮できても化け文字などになります。

 他に方法は、ということで調べたところ、従来からある zip32j.dllによる手法が良いかなぁという事になるのですが、有償ソフトへ同梱するには別途ライセンス購入が必要になるようです。
 予算が十分なら考えるところでしょうが、なかなか難しいところです。

7zipが一番いい

 別に無いかと考えたところ、7zip商用ライセンス  入手先 があることが分かりました。
 このDLLはインストールの必要性もありません。使う場合にフルパスで指定するか、Path指定のフォルダにおいておくだけで使えます。
 通常のzipファイルも作れますし、もっと圧縮率の高い7z形式のファイルも作れます。
 非常に感謝感激ですねぇ。
 活動に賛同される方は是非寄付を検討頂きたいところです。
 それではまた。

0 コメント:

コメントを投稿