加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#解压缩文件实现

发布时间:2020-12-15 17:59:20 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.IO.Compression;namespace ZipO

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;

namespace ZipOrDeCompressHelper
{
    public static  class Zip
    {
        #region 压缩、解压缩文件
        /// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="sourceFile"></param>
        /// <param name="destinationFile"></param>
        public static void CompressFile(string sourceFile,string destinationFile)
        {
            if (!File.Exists(sourceFile)) throw new FileNotFoundException();
            using (FileStream sourceStream = new FileStream(sourceFile,FileMode.Open,FileAccess.Read,FileShare.Read))
            {
                //if (checkCount != buffer.Length) throw new ApplicationException();
                using (FileStream destinationStream = new FileStream(destinationFile,FileMode.OpenOrCreate,FileAccess.Write))
                {
                    using (GZipStream compressStream = new GZipStream(destinationStream,CompressionMode.Compress))
                    {
                        byte[] buffer = new byte[1024 * 64];
                        int checkCount = 0;
                        while ((checkCount = sourceStream.Read(buffer,buffer.Length)) >= buffer.Length)
                        {
                            compressStream.Write(buffer,buffer.Length);
                        }
                        compressStream.Write(buffer,checkCount);
                    }
                }
            }
        }
        
        /// <summary>
        /// 解压缩文件
        /// </summary>
        /// <param name="sourceFile"></param>
        /// <param name="destinationFile"></param>
        public static void DeCompressFile(string sourceFile,string destinationFile)
        {
            if (!File.Exists(sourceFile)) throw new FileNotFoundException();
            using(FileStream sourceStream=new FileStream(sourceFile,FileMode.Open))
            {
                byte[] quartetBuffer = new byte[4];
                const int bufferLength = 1024 * 64;
                /*压缩文件的流的最后四个字节保存的是文件未压缩前的长度信息,
                 * 把该字节数组转换成int型,可获取文件长度。
                 * int position = (int)sourceStream.Length - 4;
                sourceStream.Position = position;
                sourceStream.Read(quartetBuffer,4);
                sourceStream.Position = 0;
                int checkLength = BitConverter.ToInt32(quartetBuffer,0);*/
                byte[] buffer = new byte[1024*64];
                using (GZipStream decompressedStream = new GZipStream(sourceStream,CompressionMode.Decompress,true))
                {
                    using (FileStream destinationStream = new FileStream(destinationFile,FileMode.Create))
                    {
                        int total = 0;
                        int bytesRead = 0;
                        while ((bytesRead = decompressedStream.Read(buffer,bufferLength)) >= bufferLength)
                        {
                            destinationStream.Write(buffer,bufferLength);
                        }
                        destinationStream.Write(buffer,bytesRead);
                        destinationStream.Flush();
                    }
                }
            }

        }
        #endregion
    }
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读