首页 > 编程 > C# > 正文

C#使用iCSharpcode进行文件压缩实现方法

2020-01-24 02:27:54
字体:
来源:转载
供稿:网友

本文所述为一个C#使用iCSharpcode压缩的使用类,经测试效果不错。分享给大家供大家参考之用。具体方法如下:

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.工作类

//****************************************************************************************//功能:实现文件压缩//使用方法:设置参数进行压缩//*****************************************************************************************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.文件源码点此本站下载

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表