zoukankan      html  css  js  c++  java
  • C#调用动态unlha32.dll解压Lha后缀的打包文件

     public class LhaUtity
        {
            ///取得DLL的版本
            [DllImport("unlha32")]
            private static extern UInt16 UnlhaGetVersion();
    
            /// <summary>
            /// '取得DLL的执行情况
            /// </summary>
            /// <returns>是否成功</returns>
            [DllImport("unlha32")]
            private static extern  Boolean UnlhaGetRunning();
    
            /// <summary>
            /// '文件检查
            /// </summary>
            /// <param name="szFileName"></param>
            /// <param name="iMode"></param>
            /// <returns></returns>
            [DllImport("unlha32")]
            private static extern Boolean UnlhaCheckArchive(String szFileName, Int32 iMode);
    
            /// <summary>
            /// 文件解压缩
            /// </summary>
            /// <param name="hwnd"></param>
            /// <param name="szCmdLine"></param>
            /// <param name="szOutput"></param>
            /// <param name="dwSize"></param>
            /// <returns></returns>
            [DllImport("unlha32")]
            private static extern int Unlha(int hwnd, string szCmdLine, string szOutput, int dwSize);
    
            /// <summary>
            /// 需要解压的文件
            /// </summary>
            /// <param name="archiveFile">解压文件路径</param>
            /// <param name="extractDir">解压到路径</param>
            /// <param name="isDeleteFile">是否删除</param>
            public static bool UnCompress(string archiveFile, string extractDir,bool  isDeleteFile)
            {
                string extractFullPath = string.Empty;
                string startPath = AppDomain.CurrentDomain.BaseDirectory;
    
                if (!System.IO.File.Exists(archiveFile))
                {
                    //判断需要解压的文件存不存
                    throw new Exception(string.Format("需要解压的{0}不存在", archiveFile));
                }
    
                try
                {
                    UInt16 ver = LhaUtity.UnlhaGetVersion();
                }
                catch (Exception ex)
                {
                    throw new Exception("没找到Unlha32.dll文件");
                }
    
                if (UnlhaGetRunning())
                {
                    throw new Exception("DLL正在执行");
                }
    
    
                if (!UnlhaCheckArchive(archiveFile, 0))
                {
                    throw new Exception("文件不能被解压缩");
                }
    
                //解压的路径
                if (string.IsNullOrEmpty(extractDir))
                {
                    extractFullPath =string.Format(@"{0}{1}", startPath,archiveFile.Substring(archiveFile.LastIndexOf("\")+1,archiveFile.IndexOf(".lha")-1-archiveFile.LastIndexOf("\")));
                }
                else
                {
                    extractFullPath = extractDir;
                }
    
                if (!System.IO.Directory.Exists(extractFullPath))
                {
                    System.IO.Directory.CreateDirectory(extractFullPath);
                }
                   
    
    
                int ret = Unlha(0, string.Format("x "{0}" "{1}"", archiveFile, extractFullPath), null, 0);
    
                if (ret != 0)
                {
    
    
                    if (ret == 32800)
                    {
                        throw new Exception("文件解压缩取消");
                    }
                    else
                    {
                        throw new Exception("文件解压缩异常结束");
    
                    }
    
                }
                else
                {
                    if (isDeleteFile)
                    {
                        System.IO.File.Delete(archiveFile);
                    }
                        
                    return true;
                }
    
    
            }
    
    }
    代码如下

    项目中需要到解压这类型的文件,无从下手,上网看资料发现是日本常用的压缩算法之一,

    查了很多资料,都没有好的办法解包,

    后来找到这个dll可以解包的

    但是网上的代码都是VB或者C的

    唯有自己写成C#版本的,其实即使C#调用动态链接库

    先到网上下载这个dll,然后把这个DLL放到C:WindowsSystem32目录下

  • 相关阅读:
    浅谈Static关键字
    iOS安装CocoaPods详细过程
    解决最新版 mac os sierra usb网卡不能使用的问题
    pyCharm最新2017激活码
    开发中所使用的渠道(统计分析、分享、第三方登录、短信等)
    oc中文首字母排序
    UIFont 设置字体
    iOS运用runtime全局修改UILabel的默认字体
    OC录制小视频
    OC
  • 原文地址:https://www.cnblogs.com/wuqihui/p/3328397.html
Copyright © 2011-2022 走看看