- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6で7-ZIPのAPIを使用した圧縮でフォルダが消えてしまいます)
VB6で7-ZIPのAPIを使用したフォルダの圧縮でフォルダが消える問題の解決方法
このQ&Aのポイント
- VB6.0で開発をしている際、7-ZipのAPIを使用してフォルダを圧縮していると、ファイルが入っていないフォルダが消える問題が発生します。ZIPファイルを展開したときに圧縮されているはずのフォルダのうち、中身が空のフォルダだけが消えてしまいます。
- 解決方法としては、7-Zipのソフトを使用して圧縮することがありますが、プログラムで実行させる場合には新しいオプションの追加が必要です。
- 具体的には、「-up2q2」などの更新オプションを追加することで、フォルダが消える問題を回避できる可能性があります。しかし、このオプションを追加しても問題が解決しない場合もあるため、別の解決策を探す必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>どなたか、解決につながりそうな情報をお持ちでしたら、 >どうか、教えてください。 7zに対応したDLLは色々あり、質問文でどのDLLを使用した場合について述べているか不明な為、回答は不可能。 開発者の思想の違いにより「空のフォルダは書庫内に残さない」「空のフォルダは圧縮しない」「空のフォルダは展開時に新規作成しない」と考える開発者と、真逆の考え方をする開発者が居る。 もちろん、どちらが正しいとは言えないが「空フォルダが事前に用意されてないと正常に動作しないのはアプリの不具合であり、空フォルダが必要ならアプリが起動後にフォルダの有無について責任を負うべきで、書庫ツールに空フォルダの生成責任を押し付けるな」と言うのが、現在の主流。 「書庫に空フォルダが出来てしまう」「書庫に空フォルダがあると展開時に空フォルダを作ってしまう」のを「明らかなバグである」と公言する開発者も居る。 因みに、書庫ソフトによっては、DLLを呼ばずにソフト内部ですべて処理するソフトもあるので、DLLとソフトで圧縮と解凍の挙動が異なる場合がある。 「DLLは幾つかある」ので「使用目的と開発思想が一致したDLL」を探して使用しよう。
お礼
ご解答ありがとうございました。 >7zに対応したDLLは色々あり、質問文でどのDLLを使用した場合について述べているか不明な為、回答は不可能。 ⇒「7-zip32.dll」を使用しています。言葉足らずですみません。 >もちろん、どちらが正しいとは言えないが「空フォルダが事前に用意されてないと正常に動作しないのはアプリの不具合であり、空フォルダが必要ならアプリが起動後にフォルダの有無について責任を負うべきで、書庫ツールに空フォルダの生成責任を押し付けるな」と言うのが、現在の主流。 ⇒ユーザからの指定でに指定のフォルダ構成でZIPファイルを作成しなくてはならず、 あちらの仕様にあわせるとなると、フォルダが必要となってしまいます。 >因みに、書庫ソフトによっては、DLLを呼ばずにソフト内部ですべて処理するソフトもあるので、DLLとソフトで圧縮と解凍の挙動が異なる場合がある。 ⇒ZIP32J.DLLとZIP32.DLLを検討しましたが、ユーザよりDLLを保存するフォルダも指定されいる関係で、これらのDLLではうまくいきませんでした。 決まったフォルダ構成で、ZIPファイルを作成する必要があり、現在検討どのDLLを使用するか検討しているところです。もし、7-zip32.dllで、空のフォルダを圧縮しないのであれば、また、他を当たるしかないですね。 ご解答ありがとうございました。
補足
すみません、自己レスです。 a -r -tzip -mx "C:\aaa.zip" "C:\aaa\" *.* ↓ a -r -tzip -mx "C:\aaa.zip" "C:\aaa\*" にして、解決しました。自分で 「全ての『ファイル』を圧縮する」と指定しておきながら、 『フォルダ』が圧縮されずに悩んでいました・・・。 私の、注意力が散漫でした・・・。 これで、解決しました。ありがとうございました!