none
LZHファイルの解凍 RRS feed

  • 質問

  • .NETプログラム内で、LZHファイルを解凍する
    処理を行うのですがフリーソフトを使用する
    コードしか見つけることができませんでした。

    Windowsの標準dllを使用して、
    LZHファイルを解凍する方法をご存知の方がいらっしゃいましたら

    ご教示頂けますでしょうか

    <実行環境>
    サーバ: WindowsServer2008 R2 64bit
    クライアント:Windows7  64bit

    <開発環境>
    VisualStudio2010
    .NETframework 4.0 

    ・圧縮形式は固定のため、Zip形式への変更等はできないようになっています。

    2012年7月2日 2:30

回答

すべての返信

  • Unlha32.dllを利用して解凍することが可能です。LHA使用の危険性も含めて、以下を参考にして下さい。

    VB.netで一部の文字列を圧縮してファイル出力する方法
    http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/d2f713ff-5a7b-40d4-a5bc-28fdeca6d29d


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク 山本春海 2012年8月2日 8:29
    2012年7月2日 2:47
    モデレータ
  • 回答ではありませんが、.NET 4ではZIP形式もLZH形式もサポートはありません。.NET 4.5でようやくZIP形式がサポートされるようになりました。

    Windowsの標準dllというのは少々語弊があります。lzhfldr2.dllというファイル名ですがこれはWindows Explorerの拡張機能でしかなく、ライブラリとしてAPIが公開されているわけではありません。

    2012年7月2日 2:51
  • > Windowsの標準dllを使用して、LZHファイルを解凍する方法をご存知の方がいらっしゃいましたら

    LHA は日本で主に用いられた圧縮形式ですが、海外では殆ど使われない形式のため Microsoft は標準でサポートしていません。

    ただし日本において以前 LZH 形式が主流であったため、特別にMicrosoft 圧縮 (LZH 形式) フォルダを公開しましたが、これは32bit 限定で 62bit版 Windows をサポートしておらず、さらに日本語版でしか動作しないという制限を抱えています。
    またプログラムから呼び出せる API の情報もなく、私にはよく判りません。

    確実にいえることは

    > <実行環境>
    > サーバ: WindowsServer2008 R2 64bit
    > クライアント:Windows7  64bit

    では動作しないでしょう。Microsoft も以下のようにはっきりアナウンスしております。

    64 ビット版 Windows には対応していますか?
    いいえ、対応していません。64 ビット版 (x64 および IA64) Windows 上ではセットアップが途中でブロックされます。


    一般的に広く使われている UnLha32.dll を使うのが一番無難だと思われます。


    ひらぽん http://d.hatena.ne.jp/hilapon/


    2012年7月2日 3:00
    モデレータ
  • 日本語版Windows 7なら、圧縮フォルダとして標準で扱うことは可能ですね(非日本語版は非搭載)。Windows Serverで使えるかどうかは知りません。

    圧縮フォルダなら、Shell32.dllをCOM参照し、Shell32.ShellオブジェクトのNameSpaceメソッドで対象のlzhファイルをFolderオブジェクトとして取得、同様にコピー先のFolderオブジェクトも取得して、lzhファイルのFolderオブジェクトのItemsプロパティをコピー先FolderオブジェクトのCopyHereメソッドに渡す、という流れになります。

    メモリ上で扱うことはできないとかシェル(Explorer)のコピーアニメが表示されるかもとか、小回りは利きませんが。

    追記:あ、64bit版ってのを見落としていた。試せないけどやっぱり載ってないのかな?

    • 編集済み Hongliang 2012年7月2日 3:31
    2012年7月2日 3:08
  • 訂正です。

    > 64 ビット版 Windows には対応していますか?
    > いいえ、対応していません。64 ビット版 (x64 および IA64) Windows 上ではセットアップが途中でブロックされます。

    すみません。日本語版 Windows 7 64bit なら、標準でサポートされていたのですね。失礼しました。<(_ _;)>


    ひらぽん http://d.hatena.ne.jp/hilapon/

    2012年7月2日 3:21
    モデレータ
  • 手元の Windows 7 Ultimate SP1 (x64) の日本語版で確認する限り、標準で搭載されています。
    海外環境も視野に入れる必要があるのであれば、別ソリューションに頼った方がよいのは事実ですが…。

    2012年7月2日 13:54
    モデレータ