C\#에서 zip 압축 해제 도움말 류 에 대한 패키지 소스 다운로드

7150 단어 zip 압축 해제
c\#압축 을 풀 고 주로 제3자 라 이브 러 리 로 봉 인 됩 니 다.ICSharpCode.SharpZipLib.dll라 이브 러 리,링크 주 소 는 공식 다운로드 링크 입 니 다.압축 은 주로 흐 르 는 방식 으로 압축 된다.
파일 및 폴 더 압축.파일 압축 은 매우 간단 하 다.압축 할 파일 을 흐 르 는 방식 으로 메모리 에 읽 은 다음 압축 흐름 에 넣는다.됐 습 니 다.폴 더 가 좀 귀 찮 습 니 다.압축 할 폴 더 의 압축 을 풀 고 폴 더 파일 의 계층 구 조 를 유지 해 야 하기 때문이다.그래서 제 실현 방식 은 폴 더 에 있 는 파일 을 재 귀적 으로 옮 겨 다 니 는 것 입 니 다.상대 적 인 위 치 를 계산 하여 압축 흐름 에 넣다.
코드 는 다음 과 같 습 니 다

/// <summary>
        ///
        /// </summary>
        /// <param name="_depositPath">    C:\\windows\abc.zip</param>
        /// <returns></returns>
        public bool CompressionZip(string _depositPath)
        {
            bool result = true;
            FileStream fs = null;
            try
            {
                ZipOutputStream ComStream = new ZipOutputStream(File.Create(_depositPath));
                ComStream.SetLevel(9);      //
                foreach (string path in AbsolutePaths)
                {
                    //
                    if (Directory.Exists(path))
                    {
                        ZipFloder(path, ComStream, path);
                    }
                    else if (File.Exists(path))//
                    {
                         fs = File.OpenRead(path);
                        byte[] bts = new byte[fs.Length];
                        fs.Read(bts, 0, bts.Length);
                        ZipEntry ze = new ZipEntry(new FileInfo(path).Name);
                        ComStream.PutNextEntry(ze);             //
                        ComStream.Write(bts, 0, bts.Length);  //
                    }
                }
                ComStream.Finish(); //
                ComStream.Close();
            }
            catch (Exception ex)
            {
                if (fs != null)
                {
                    fs.Close();
                }
                errorMsg = ex.Message;
                result = false;
            }
            return result;
        }
        //
        private void ZipFloder(string _OfloderPath, ZipOutputStream zos, string _floderPath)
        {
            foreach (FileSystemInfo item in new DirectoryInfo(_floderPath).GetFileSystemInfos())
            {
                if (Directory.Exists(item.FullName))
                {
                    ZipFloder(_OfloderPath, zos, item.FullName);
                }
                else if (File.Exists(item.FullName))//
                {
                    DirectoryInfo ODir = new DirectoryInfo(_OfloderPath);
                    string fullName2 = new FileInfo(item.FullName).FullName;
                    string path = ODir.Name + fullName2.Substring(ODir.FullName.Length, fullName2.Length - ODir.FullName.Length);//
                    FileStream fs = File.OpenRead(fullName2);
                    byte[] bts = new byte[fs.Length];
                    fs.Read(bts, 0, bts.Length);
                    ZipEntry ze = new ZipEntry(path);
                    zos.PutNextEntry(ze);             //
                    zos.Write(bts, 0, bts.Length);  //
                }
            }
        }
스트레스 해소 에 대하 여  스트레스 푸 는 게 훨씬 쉬 워.파일 압축 해제 파일 이 있 고 폴 더 가 옮 겨 다 니 며 압축 해제 파일 이 있 습 니 다.압축 을 푸 는 파일 에는 폴 더 와 의 차원 관계 가 포함 되 어 있 습 니 다.

/// <summary>
        ///
        /// </summary>
        /// <param name="_depositPath"> </param>
        /// <param name="_floderPath"> </param>
        /// <returns></returns>
        public bool DeCompressionZip(string _depositPath, string _floderPath)
        {
            bool result = true;
            FileStream fs=null;
            try
            {
                ZipInputStream InpStream = new ZipInputStream(File.OpenRead(_depositPath));
                ZipEntry ze = InpStream.GetNextEntry();//
                Directory.CreateDirectory(_floderPath);//
                while (ze != null)// ze null
                {
                    if (ze.IsFile)// zipINputStream 。 \\
                    {
                        string[] strs=ze.Name.Split('\\');// '\\‘
                        if (strs.Length > 1)
                        {
                            //
                            for (int i = 0; i < strs.Length-1; i++)
                            {
                                string floderPath=_floderPath;
                                for (int j = 0; j < i; j++)
                                {
                                    floderPath = floderPath + "\\" + strs[j];
                                }
                                floderPath=floderPath+"\\"+strs[i];
                                Directory.CreateDirectory(floderPath);
                            }
                        }
                         fs = new FileStream(_floderPath+"\\"+ze.Name, FileMode.OpenOrCreate, FileAccess.Write);//
                        //
                        while (true)
                        {
                            byte[] bts = new byte[1024];
                           int i= InpStream.Read(bts, 0, bts.Length);
                           if (i > 0)
                           {
                               fs.Write(bts, 0, i);
                           }
                           else
                           {
                               fs.Flush();
                               fs.Close();
                               break;
                           }
                        }
                    }
                    ze = InpStream.GetNextEntry();
                }
            }
            catch (Exception ex)
            {
                if (fs != null)
                {
                    fs.Close();
                }
                errorMsg = ex.Message;
                result = false;
            }
            return result;
        }
마지막 으로 총 결 을 한다.C\#고급 언어 로 서 강력 한 라 이브 러 리 와 제3자 가 제공 하 는 라 이브 러 리 입 니 다.많은 일 을 할 수 있다.그러나 제3자 라 이브 러 리 를 사용 하 는 성능 이 높 지 않다 는 단점 도 있다.나 는 몇 백 M 의 물건 을 압축 했다.cpu 는 순식간에 50%넘 게 달 렸 다.360 압축 과 zip 압축 성능 보다 훨씬 떨어진다.그래서 이런 것 도 압축 이 비교적 작은 것 에 적용 된다.
전체 예 다운로드 주소

좋은 웹페이지 즐겨찾기