65.9K
CodeProject 正在变化。 阅读更多。
Home

一套用于压缩和解压缩各种数据的例程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (17投票s)

2005年3月21日

CPOL

3分钟阅读

viewsIcon

136833

downloadIcon

1976

一个包含多种例程的类,用于快速方便地压缩和解压缩各种数据。

Example image of a folder structure that can be compressed and decompressed using the routines of the class described in this article

引言

(最新变更请参阅下方历史记录部分)

在我的一些应用程序中,无论是 Web 应用程序还是 Windows 应用程序,我都需要一种简单的方式来压缩数据,例如单个文件、多个文件、XML 文档等。例如,DataSet。我经常遇到的一个场景是,我编写了一个 Windows 客户端应用程序,需要以节省带宽(因此经过压缩)的方式,通过 Web 服务将表和文件传输到 Web 服务器。

因此,我编写了一个小类,将在本文中介绍,以使我的生活更轻松。这个类具有易于使用的静态方法,用于压缩和解压缩各种类型的数据。

背景

该类使用 ZIP 算法来实际执行数据的压缩和解压缩。我没有自己编写 ZIP 和解 ZIP 例程,而是使用了免费库 SharpZipLib。所以,如果你觉得我只是“写了一个 ZIP 库的包装器”,那也说得过去。但嘿,它让我的生活更轻松,希望这些例程也能对你有所帮助。

该类包含用于压缩和解压缩下表中所示数据的静态例程,每种数据类型都有一个压缩/解压缩例程对。(请注意:为提高可读性,此处省略了参数。)

要压缩/解压缩的数据类型 压缩例程 解压缩例程
包含文件和子文件夹的文件系统文件夹。 CompressFolder() DecompressFolder()
一个文件系统文件夹中的多个文件。 CompressFiles() DecompressFiles()
单个文件。 CompressFile() DecompressFile()
内存中的 XmlDocument CompressXmlDocument() DecompressXmlDocument()
内存中的 string CompressString() DecompressString()
内存中的 DataSet CompressDataSet() DecompressDataSet()
内存中的 byte[] 数组。 CompressBytes() DecompressBytes()

每个压缩例程都返回一个 byte[] 数组,您可以使用它传输到目标(例如 Web 服务器),然后在目标处使用正确的解压缩例程解压缩 byte[] 数组。

请注意:解压缩例程不知道 byte[] 数组是由哪个压缩例程生成的。因此,作为程序员,您需要确保解压缩例程只接收到经过相应压缩例程压缩的 byte[] 数组。例如,将调用 CompressString() 的结果传递给 DecompressFile() 例程将是一个错误。相反,对 CompressString() 的调用必须通过调用 DecompressString() 来解压缩。

示例

示例 1 - 压缩和解压缩字符串。

以下示例演示了如何压缩字符串然后再次解压缩该字符串

// Compress a string.
string stringToCompress = "Hello world!";
byte[] buffer = 
    CompressionHelper.CompressString( stringToCompress );
 
...
 
// Decompress.
string decompressedString = 
    CompressionHelper.DecompressString( buffer );

示例 2 - 压缩一个包含多个文件和子文件夹的文件夹。

要压缩一个包含多个文件和子文件夹的文件夹,请使用以下示例中描述的方法

// Compress multiple files and subfolders.
byte[] buffer = CompressionHelper.CompressFolder(
    @"c:\MyInputFolder" );
  
...// Decompress multiple files and subfolders.
CompressionHelper.DecompressFolder(
    buffer,
    @"c:\MyOutputFolder" );

在您的项目中使用的代码

本文的代码下载包含一个小型示例项目,以及库的预编译版本(.NET 版本 1.1,调试和发布)。要在您自己的项目中使用它,您至少有两种选择:

  1. 只需将“Release”文件夹中的内容(即“ICSharpCode.SharpZipLib.dll”和“ZetaCompressionLibrary.dll”文件)复制到您选择的文件夹中,然后使用 Visual Studio .NET 2003 中的 **添加引用** 命令添加对它的引用。
  2. 复制源文件“CompressionHelper.cs”并将其添加到您的项目中,以便与您的项目一起编译。

结论

在本文中,我向您介绍了一个小型类,可以快速方便地压缩和解压缩各种数据。当需要快速压缩和解压缩数据而无需手动处理所有复杂性时,此代码对我帮助很大。希望您也觉得这个类很有用。

如有任何问题、意见和建议,请使用本文底部的评论区。

历史

  • 2005-03-21:创建文章的第一个版本。
© . All rights reserved.