C# 基于SharpZipLib 实现 文件压缩,以及解压

来源:互联网 发布:微盘交易php源码 编辑:程序博客网 时间:2024/05/17 03:57
  //压缩文件        public static void Zip(string srcFile, string dstFile, int bufferSize)        {            //创建压缩文件路径            using (FileStream fileStreamOut = new FileStream(dstFile, FileMode.Create, FileAccess.Write))            {                string[] fileList = srcFile.Split('*');                //创建压缩流                using (ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut))                {                    //循环文件列表 (我这里并没有做判断,在操作的时候 需要进行判断 当前路径是否有效,如果路径是无效的,后面的操作会抛出异常)                    for (int i = 0; i < fileList.Length; i++)                    {                        //打开需要压缩的文件                        using (FileStream fileStreamIn = new FileStream(fileList[i], FileMode.Open, FileAccess.Read))                        {                            if (null == fileStreamIn)                            {                                return;                            }                            byte[] buffer = new byte[fileStreamIn.Length];                            ZipEntry entry = new ZipEntry(Path.GetFileName(fileList[i]));                            zipOutStream.PutNextEntry(entry);                            int size;                            size = fileStreamIn.Read(buffer, 0, buffer.Length);                            zipOutStream.Write(buffer, 0, size);                            zipOutStream.Flush();                        }                    }                }            }        }        /// <summary>         /// 使用SharpZipLib解压缩Zip文件         /// </summary>         /// <param name="srcFile">Zip源文件</param>         /// <param name="dstFile">解压出来的文件</param>         /// <param name="bufferSize">缓冲大小</param>         public static void UnZip(string srcFile, string dstFile, int bufferSize)        {            using (FileStream fileStreamIn = new FileStream(srcFile, FileMode.Open, FileAccess.Read))            {                using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn))                {                    ZipEntry entry = zipInStream.GetNextEntry();                    //循环读取,是否包含下一个文件                    while (entry != null)                    {                        //此为当前文件的大小                        long Length = zipInStream.Length;                        //此为文件的名称                        string name = entry.Name;                        using (FileStream fileStreamOut = new FileStream(dstFile + @"\" + entry.Name, FileMode.Create, FileAccess.Write))                        {                            int size;                            byte[] buffer = new byte[bufferSize];                            do                            {                                size = zipInStream.Read(buffer, 0, buffer.Length);                                fileStreamOut.Write(buffer, 0, size);                            }                            while (size > 0);                            fileStreamOut.Flush();                        }                        entry = zipInStream.GetNextEntry();                    }                }            }        }