• 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目录下

  • 相关阅读:
    线性代数:名词概念
    机器学习:多元线性回归
    机器学习:衡量线性回归法的指标(MSE、RMSE、MAE、R Squared)
    Numpy:dot()函数
    机器学习:线性回归法(Linear Regression)
    算法的时间复杂度和空间复杂度
    机器学习:数据归一化(Scaler)
    机器学习:使用scikit-learn库中的网格搜索调参
    机器学习:调整kNN的超参数
    Windows:cmd的使用
  • 原文地址:https://www.cnblogs.com/wuqihui/p/3328397.html
Copyright © 2020-2023  润新知