C# 對多個文件進行zip壓縮


本文使用的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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM