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

前端技术 2023/09/04 .NET

复制代码 代码如下:

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;
            }


        }

}

本文地址:https://www.stayed.cn/item/9539

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。