一套用于压缩和解压缩各种数据的例程
一个包含多种例程的类,用于快速方便地压缩和解压缩各种数据。
引言
(最新变更请参阅下方历史记录部分)
在我的一些应用程序中,无论是 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,调试和发布)。要在您自己的项目中使用它,您至少有两种选择:
- 只需将“Release”文件夹中的内容(即“ICSharpCode.SharpZipLib.dll”和“ZetaCompressionLibrary.dll”文件)复制到您选择的文件夹中,然后使用 Visual Studio .NET 2003 中的 **添加引用** 命令添加对它的引用。
- 复制源文件“CompressionHelper.cs”并将其添加到您的项目中,以便与您的项目一起编译。
结论
在本文中,我向您介绍了一个小型类,可以快速方便地压缩和解压缩各种数据。当需要快速压缩和解压缩数据而无需手动处理所有复杂性时,此代码对我帮助很大。希望您也觉得这个类很有用。
如有任何问题、意见和建议,请使用本文底部的评论区。
历史
- 2005-03-21:创建文章的第一个版本。