软件编程
位置:首页>> 软件编程>> C#编程>> C#使用iCSharpcode进行文件压缩实现方法

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

作者:shichen2014  发布时间:2022-09-28 06:25:32 

标签:C#,文件,压缩

本文所述为一个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#程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com