利用 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
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号