C#使用iCSharpcode进行文件压缩

版权所有,禁止匿名转载;禁止商业使用。

最近事情不是很多,所以对iCSharpcode的使用进行了一些研究,根据公司一些用法,写出了一个压缩的使用类,效果还ok,也算是自己的一个学习了。


1:参数类

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

namespace ZipCompress
{
    public class ZipParameter
    {
        private string zip_Name = "";
        private string zip_DirectoryName = "";
        private List<string> zip_FileList = new List<string>();
        /// <summary>
        /// 压缩后的文件名称
        /// </summary>
        public string ZIPName
        {
            get { return zip_Name; }
            set { zip_Name = value; }
        }

        /// <summary>
        /// 压缩的文件路径
        /// </summary>
        public string ZIPDirectoryName
        {
            get { return zip_DirectoryName; }
            set { zip_DirectoryName = value; }
        }
        /// <summary>
        /// 压缩的文件列表
        /// </summary>
        public List<string> ZIPFileList
        {
            get { return zip_FileList; }
            set { zip_FileList = value; }
        }
    }
}

2:工作类

//****************************************************************************************
//作者:轻狂书生
//博客地址:http://www.cnblogs.com/xiaoshuai1992
//create: 2014/2/26
//功能:实现文件压缩
//使用方法:设置参数进行压缩
//*****************************************************************************************


using System;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;
using System.Text;

namespace ZipCompress
{
    public class CompressFile
    {
        /// <summary>
        /// 压缩文件参数
        /// </summary>
        public ZipParameter ZipParameter { get; set; }

        /// <summary>
        /// 压缩文件返回压缩后的信息
        /// </summary>
        /// <returns>string 返回压缩后的提示信息</returns>
        public string CompressReturnMsg()
        {
            FileStream Zip_File;
            ZipOutputStream ZipStream;
            ZipEntry ZipEntry;
            string rtnMessage = "";//返回的信息

            try
            {
                //循环文件,如果文件不存在就不添加的压缩里面
                for (int i = 0; i < ZipParameter.ZIPFileList.Count; i++)
                {
                    if (!File.Exists(ZipParameter.ZIPFileList[i]))
                    {
                        ZipParameter.ZIPFileList.RemoveAt(i);
                        i--;
                    }

                }
                //没有有文件下面的压缩不执行
                if (ZipParameter.ZIPFileList.Count == 0)
                {
                    return " file not find";
                }
                //没有目录进行创建
                if (!Directory.Exists(ZipParameter.ZIPDirectoryName))
                {
                    Directory.CreateDirectory(ZipParameter.ZIPDirectoryName);
                }

                // 解决文档名称乱码问题,出现乱码就是因为CodePage不对
                Encoding gbk = Encoding.GetEncoding("gbk");
                ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage;

                //文件路径,文档路径与文件名称
                string strPath = ZipParameter.ZIPDirectoryName + ZipParameter.ZIPName;

                Zip_File = File.Create(strPath);
                ZipStream = new ZipOutputStream(Zip_File);
                foreach (string FileToZip in ZipParameter.ZIPFileList)
                {
                    Zip_File = File.OpenRead(FileToZip);
                    byte[] buffer = new byte[Zip_File.Length];
                    Zip_File.Read(buffer, 0, buffer.Length);
                    Zip_File.Close();
                    ZipEntry = new ZipEntry(Path.GetFileName(FileToZip));
                    ZipStream.PutNextEntry(ZipEntry);
                    ZipStream.Write(buffer, 0, buffer.Length);
                }
                ZipStream.Finish();
                ZipStream.Close();
                Zip_File.Close();
                rtnMessage = "success";
            }
            catch (Exception ex)
            {
                rtnMessage = "fail:" + ex.Message;
            }
            finally
            {
                GC.Collect();
                GC.Collect(1);
            }
            return rtnMessage;
        }
    }
}

3:使用类


    ZipParameter zp = new ZipParameter();
            zp.ZIPDirectoryName = @"C:\Users\Public\Pictures\Sample Pictures\";
            zp.ZIPName = "Test.zip";
            zp.ZIPFileList.Add(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg");
            zp.ZIPFileList.Add(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
            zp.ZIPFileList.Add(@"C:\Users\Public\Pictures\Sample Pictures\错误文件.jpg");
            CompressFile cprFile = new CompressFile();
            cprFile.ZipParameter = zp;
            string strMessage = cprFile.CompressReturnMsg();

4:文件下载路径ZipCompress.zip


0 0