Using ZipLib to create a Zip File in C#
System.IO.Compression是.Net 2.0里与压缩有关的命名空间,但是使用起来并不是很方便。使用第3方库ziplib可以很方便地进行压缩类的操作。
从[1]
下载动态库,然后在工程里Add Reference,把ICSharpCode.SharpZipLib.dll加进去。
在代码来创建一个zip包的例子如下(摘自ziplib sample code)
using
ICSharpCode.SharpZipLib.Checksums;
using
ICSharpCode.SharpZipLib.Zip;
using
ICSharpCode.SharpZipLib.GZip;
把指定目录下的所有文件压缩到一个zip包里
private
void ZipTheReports()
{
string
year = System.DateTime.Today.Year.ToString();
string
month = System.DateTime.Today.Month.ToString();
string
days = System.DateTime.Today.Day.ToString();
string[]
filenames = Directory.GetFiles(curDir);
string
zipFileName = "Rplan Report " +
year + month + days + ".zip";
string
zipAbsPath = this.curDir + zipFileName;
zipRelativePath = zipFileName;
Crc32
crc = new Crc32();
ZipOutputStream
s = new ZipOutputStream(File.Create(zipAbsPath)); // 指定zip文件的绝对路径,包括文件名
s.SetLevel(6); // 0 - store only to 9 - means best compression
foreach
(string file in
filenames)
{
FileStream
fs = File.OpenRead(file); // 文件的绝对路径,包括文件名
byte[] buffer
= new byte[fs.Length];
fs.Read(buffer, 0,
buffer.Length);
ZipEntry
entry = new ZipEntry(extractFileName(file));
//这里ZipEntry的参数必须是相对路径名,表示文件在zip文档里的相对路径
entry.DateTime = DateTime.Now;
//
about the size and crc should be stored in the header
// if
it is not set it is automatically written in the footer.
//
(in this case size == crc == -1 in the header)
//
Some ZIP programs have problems with zip files that don't store
// the size and crc in the header.
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
s.PutNextEntry(entry);
}
s.Finish();
s.Close();
}
private string extractFileName(string filePath)
{
int
index1 = filePath.LastIndexOf("\\");
string
fileName =
filePath.Substring(index1+1);
}
1.ZipLib
http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx
A port of zlib library to C#. Its license allows developers
to include this library in commercial, closed-source applications.
2. System.IO.Compression Namespace
http://msdn2.microsoft.com/en-us/library/system.io.compression.aspx
DeflateStream Class
http://msdn2.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx
3.Compression
Application Sample
http://msdn2.microsoft.com/en-us/library/ywf6dxhx.aspx
This sample demonstrates compression capabilities available in the .NET Framework. It builds a Windows Forms application that employs the GZipStream and DeflateStream types to compress and decompress files. The sample also introduces several types that are new in the .NET Framework version 2.0.
http://msdn.microsoft.com/msdnmag/issues/03/06/ZipCompression/default.aspx