您的位置:首页 > 编程语言 > C#

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

2014-08-28 11:41 1101 查看

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

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 文件 压缩