代码改变世界

利用 SharpZip 组件实现在线压缩与解压,减小带宽浪费

2011-10-30 12:08  音乐让我说  阅读(754)  评论(1)    收藏  举报

 

SharpZip 的官方下载:http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

 

自己在最近的一个项目中有这样一个需求:需要将正式服务器中的数据导入到测试服务器上,于是做了一个“数据同步”的功能,点击测试服务器上的 Import.aspx 页面中的“同步”按钮后,在事件中利用配置好了的正式服务器上的 Export.aspx 页面地址,发出 HttpWebRequest 请求,获得GZipStream流,得到 XML 的一个Zip 文件,最终利用 DataSet 的 ReadXML 就可以转换为 DataSet,最终导入到测试服务器上。可在项目 QC (代码同行审读)上,Leader 觉得这样不妥,因为我们是没有权限的,只有运营有权限,他们不懂“同步”功能,于是需要传统的导出、导入,也就是从正式服务器上点下载,然后在测试服务器中导入zip。于是需要将正式服务器中的 DataSet 生成的 xml 文件打包,然后在测试服务器上解压这个 zip ,得到这些 xml 文件,利用 dataSet.ReadXml 读取。

总结: SharpZip 还真好用啊,服务器上无需安装 RAR,就可以压缩与解压,非常不错。下次做一个 Demo 来记录自己的心得。

测试代码如下:

using System;
using ICSharpCode.SharpZipLib.Zip;

namespace SharpZipDemo
{
class Program
{
static void Main(string[] args)
{
TestZipFile();
ShowFilesInZip();
UnZipFileToFolder();
Console.WriteLine("运行结束");
Console.ReadLine();
}

/// <summary>
/// 创建zip文件,并添加文件
/// </summary>
static void TestZipFile()
{
using (ZipFile zip = ZipFile.Create(@"D:\test.zip"))
{
zip.BeginUpdate();
zip.Add(@"D:\aaa.txt");
zip.Add(@"D:\bbb.txt");
zip.CommitUpdate();
}
}

/// <summary>
/// 将文件添加到已有zip文件中
/// </summary>
static void TestAddFileToZipFile()
{
//注意:如果 D:\test.zip 存在,将清空里面的文件,然后把 D:\ccc.txt 放进去
// 否则如果不存在,则创建
using (ZipFile zip = ZipFile.Create(@"D:\test.zip"))
{
zip.BeginUpdate();
zip.Add(@"D:\ccc.txt");
zip.CommitUpdate();
}
}

/// <summary>
/// 将文件夹压缩为文件
/// </summary>
static void TestZipFolder()
{
(new FastZip()).CreateZip(@"D:\testDir.zip", @"D:\TempFolder", true, "");
// 注意:true 表示递归
}

/// <summary>
/// 列出 Zip 文件中的文件
/// </summary>
static void ShowFilesInZip()
{

using (ZipFile zip = new ZipFile(@"D:\test.zip"))
{
string list = string.Empty;
foreach (ZipEntry entry in zip)
{
list += entry.Name + "\r\n";
}
Console.WriteLine(list);
}
}

/// <summary>
/// 删除zip文件中的一个文件
/// </summary>
static void DeleteFilesInZip()
{
using (ZipFile zip = new ZipFile(@"D:\test.zip"))
{
zip.BeginUpdate();
zip.Delete(@"bbb.txt");
zip.CommitUpdate();
}
}

/// <summary>
/// 解压zip文件中文件到指定目录下
/// </summary>
static void UnZipFileToFolder()
{
(new FastZip()).ExtractZip(@"D:\test.zip", @"D:\unZipResult\", "");
}
}
}

 

常用类:

ZipInputStream、GZipInputStream用于解压缩Deflate、GZip格式流,ZipOutputStream、GZipOutputStream用于压缩Deflate、GZip格式流

。 StreamUtil类包含了几个Stream处理辅助方法:   1) Copy(Stream, Stream, Byte[])用于从一个Stream对象中复制数据到另一Stream对

象。有多个重写。   2) ReadFully(Stream, Byte [])用于从Stream对象中读取所有的byte数据。有多个重写。

 

Demo 下载:https://files.cnblogs.com/Music/SharpZipDemo.rar

谢谢浏览!