本文使用的ICSharpCode.SharpZipLib.dll類庫來實現文件壓縮,你可以通過Nuget來安裝此類庫,或者到搜索引擎去搜索一下遍地都是。類庫下載下來之后,添加到項目引用就可以了。下面這個函數可以實現壓縮多個文件,希望對你有用:
/// <summary>
/// 將多個流進行zip壓縮,返回壓縮后的流
/// </summary>
/// <param name="streams">key:文件名;value:文件名對應的要壓縮的流</param>
/// <returns>壓縮后的流</returns>
static Stream PackageManyZip(Dictionary<string, Stream> streams)
{
byte[] buffer = new byte[6500];
MemoryStream returnStream = new MemoryStream();
var zipMs = new MemoryStream();
using (ZipOutputStream zipStream = new ZipOutputStream(zipMs))
{
zipStream.SetLevel(9);
foreach (var kv in streams)
{
string fileName = kv.Key;
using (var streamInput = kv.Value)
{
zipStream.PutNextEntry(new ZipEntry(fileName));
while (true)
{
var readCount = streamInput.Read(buffer, 0, buffer.Length);
if (readCount > 0)
{
zipStream.Write(buffer, 0, readCount);
}
else
{
break;
}
}
zipStream.Flush();
}
}
zipStream.Finish();
zipMs.Position = 0;
zipMs.CopyTo(returnStream, 5600);
}
returnStream.Position = 0;
return returnStream;
}
