dポイントプレゼントキャンペーン実施中!

Windows2000 VB6.0で開発をしています。

7-ZipのAPIを使用してフォルダを圧縮しています。
そのときのコマンドは下記の通りです。
"a -r -tzip -mx "XXX.zip" "XXX\" *.*

圧縮もとのXXXフォルダの中には
3つのフォルダが入っていて、
そのうち一つのフォルダにはファイルが
1つも入っていません。

上のコマンドをプログラムで実行させて、
XXX.zipファイルを作成後
圧縮元となるフォルダを削除すると、
なぜか、ZIPファイルを展開したときに、
圧縮されているはずの3つのフォルダのうち、
ファイルの入っていないフォルダだけ消えて
フォルダが2つになっています。

中身が空のフォルダも残して
フォルダの構成はそのままで圧縮したいので、
フォルダが消えてしまって、困っています。

ちなみに7-Zipのソフトで実行すると、
フォルダは消えません。

7-zipのコマンドで更新オプションの部分が怪しく、
「-up2q2」など追加して色々ためしているのですが、
なかなかうまくいきません(涙)

どなたか、解決につながりそうな情報をお持ちでしたら、
どうか、教えてください。

よろしくお願い致します。 

A 回答 (1件)

>どなたか、解決につながりそうな情報をお持ちでしたら、


>どうか、教えてください。

7zに対応したDLLは色々あり、質問文でどのDLLを使用した場合について述べているか不明な為、回答は不可能。

開発者の思想の違いにより「空のフォルダは書庫内に残さない」「空のフォルダは圧縮しない」「空のフォルダは展開時に新規作成しない」と考える開発者と、真逆の考え方をする開発者が居る。

もちろん、どちらが正しいとは言えないが「空フォルダが事前に用意されてないと正常に動作しないのはアプリの不具合であり、空フォルダが必要ならアプリが起動後にフォルダの有無について責任を負うべきで、書庫ツールに空フォルダの生成責任を押し付けるな」と言うのが、現在の主流。

「書庫に空フォルダが出来てしまう」「書庫に空フォルダがあると展開時に空フォルダを作ってしまう」のを「明らかなバグである」と公言する開発者も居る。

因みに、書庫ソフトによっては、DLLを呼ばずにソフト内部ですべて処理するソフトもあるので、DLLとソフトで圧縮と解凍の挙動が異なる場合がある。

「DLLは幾つかある」ので「使用目的と開発思想が一致したDLL」を探して使用しよう。

この回答への補足

すみません、自己レスです。

a -r -tzip -mx "C:\aaa.zip" "C:\aaa\" *.*

a -r -tzip -mx "C:\aaa.zip" "C:\aaa\*"

にして、解決しました。自分で
「全ての『ファイル』を圧縮する」と指定しておきながら、
『フォルダ』が圧縮されずに悩んでいました・・・。

私の、注意力が散漫でした・・・。
これで、解決しました。ありがとうございました!

補足日時:2008/09/12 10:40
    • good
    • 0
この回答へのお礼

ご解答ありがとうございました。

>7zに対応したDLLは色々あり、質問文でどのDLLを使用した場合について述べているか不明な為、回答は不可能。
⇒「7-zip32.dll」を使用しています。言葉足らずですみません。

>もちろん、どちらが正しいとは言えないが「空フォルダが事前に用意されてないと正常に動作しないのはアプリの不具合であり、空フォルダが必要ならアプリが起動後にフォルダの有無について責任を負うべきで、書庫ツールに空フォルダの生成責任を押し付けるな」と言うのが、現在の主流。

⇒ユーザからの指定でに指定のフォルダ構成でZIPファイルを作成しなくてはならず、
あちらの仕様にあわせるとなると、フォルダが必要となってしまいます。

>因みに、書庫ソフトによっては、DLLを呼ばずにソフト内部ですべて処理するソフトもあるので、DLLとソフトで圧縮と解凍の挙動が異なる場合がある。

⇒ZIP32J.DLLとZIP32.DLLを検討しましたが、ユーザよりDLLを保存するフォルダも指定されいる関係で、これらのDLLではうまくいきませんでした。
決まったフォルダ構成で、ZIPファイルを作成する必要があり、現在検討どのDLLを使用するか検討しているところです。もし、7-zip32.dllで、空のフォルダを圧縮しないのであれば、また、他を当たるしかないですね。

ご解答ありがとうございました。

お礼日時:2008/09/11 17:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!