栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

C#调用动态unlha32.dll解压Lha后缀的打包文件分享

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#调用动态unlha32.dll解压Lha后缀的打包文件分享

复制代码 代码如下:
public class LhaUtity
    {
        ///取得DLL的版本
        [Dllimport("unlha32")]
        private static extern UInt16 UnlhaGetVersion();

        ///


        /// '取得DLL的执行情况
        ///

        /// 是否成功
        [Dllimport("unlha32")]
        private static extern  Boolean UnlhaGetRunning();

        ///


        /// '文件检查
        ///

        ///
        ///
        ///
        [Dllimport("unlha32")]
        private static extern Boolean UnlhaCheckArchive(String szFileName, Int32 iMode);

        ///


        /// 文件解压缩
        ///

        ///
        ///
        ///
        ///
        ///
        [Dllimport("unlha32")]
        private static extern int Unlha(int hwnd, string szCmdLine, string szOutput, int dwSize);

        ///


        /// 需要解压的文件
        ///

        /// 解压文件路径
        /// 解压到路径
        /// 是否删除
        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目录下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/57479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号