SharpZipLib是C#開源壓縮解壓縮元件 SharpZipLib可以很容易将多個檔案打包成一個zip包 使用版本:0.85.4.369 1.壓縮檔案: using (ZipFile zip = ZipFile.Create( @" E:\test.zip "))
{
zip.BeginUpdate();
zip.Add( @" C:\Test\file\file.txt ");
zip.Add( @" C:\Test\image\image.jpg ");
zip.CommitUpdate();
} 注意:這樣打包後的zip包是按照檔案路徑打包的,本例的zip包解壓後會是: 解壓根目錄/Image/image.jpg 解壓根目錄/File/file.txt 2.壓縮Stream或者字元串 我們如何添加字元串或者Stream?這個時候改IStaticDataSource接口閃亮登場了: namespace ICSharpCode.SharpZipLib.Zip
{
public interface IStaticDataSource
{
Stream GetSource();
}
} 該接口有個傳回Stream的GetSource方法,我們可以實作該接口,進而支援字元串檔案或者byte[]的打包。 class StreamDataSource : IStaticDataSource
{
public byte[] Buffer { get; private set; }
public StreamDataSource( byte[] buffer)
{
Buffer = buffer;
}
public Stream GetSource()
{
return new MemoryStream(Buffer);
}
} 實作了該接口後,那麼我們壓縮byte[]代碼就十分簡單了: using (ZipFile zip = ZipFile.Create(destinationFile))
{
zip.BeginUpdate();
foreach ( var item in imageUnits)
{
buffer = null;
try
{
buffer = GetBytesFromUrl(Path.Combine(imageEntity.DownloadUrl, item.ImagePath));
}
catch
{
}
if (buffer != null && buffer.Length > 0)
{
StreamDataSource dataSource = new StreamDataSource(buffer);
zip.Add(dataSource, item.ImagePath);
}
}
zip.CommitUpdate();
}
轉載于:https://www.cnblogs.com/jeriffe/archive/2012/04/25/2470112.html