C# 동적 unlha32 호출dll 압축 풀기 Lha 접미사 패키지 공유

4278 단어
 
  
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:\Windows\System32 디렉터리에 놓으세요

좋은 웹페이지 즐겨찾기