SharpZipLib 參考範例

Zip, SharpZipLib 範例

有支援 NET6

只支援到 NET2

範例:壓縮目錄

MemoryStream ZipFiles(string folderPath, string mima)
{
    //讀取檔案
    ArrayList ar = GetFileList(folderPath);

    int TrimLength = (Directory.GetParent(folderPath)).ToString().Length;

    TrimLength += 1;
    FileStream ostream;
    byte[] obuffer;

    MemoryStream ms = new();
    using var oZipStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(ms);

    if (!String.IsNullOrWhiteSpace(mima))
        oZipStream.Password = mima;

    oZipStream.SetLevel(9);

    foreach (string Fil in ar)
    {
        var oZipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(Fil.Remove(0, TrimLength));
        oZipStream.PutNextEntry(oZipEntry);

        if (!Fil.EndsWith(@"/"))
        {
            ostream = File.OpenRead(Fil);
            obuffer = new byte[ostream.Length];
            ostream.Read(obuffer, 0, obuffer.Length);
            oZipStream.Write(obuffer, 0, obuffer.Length);
        }
    }

    oZipStream.Finish();
    oZipStream.Close();
    return ms;
}

範例:壓縮單一檔案

/// 上傳附件並Zip加密
async Task HandleAddAttach(InputFileChangeEventArgs e)
{
  try
  {
    f_Loading = true;
    IBrowserFile uploadFile = e.GetMultipleFiles().FirstOrDefault();

    using (var tgt = new FileStream($"C:\\Temp\\{uploadFile.Name}.zip", FileMode.Create))
    using (var ms = new MemoryStream())
    using (var src = uploadFile.OpenReadStream())
    {
      await src.CopyToAsync(ms);
      ZipFile(ms, uploadFile.Name, tgt, "12345678");
    }

    //更新畫面...
  }
  catch (Exception ex)
  {
    dlgSvc.ShowAlert(ex.Message, "上傳附件失敗!", type: Severity.Error);
  }
  finally
  {
    f_Loading = false;
  }
}
void ZipFile(MemoryStream ms, string filename, FileStream tgt, string mima)
{
  var oZipStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(tgt);
  oZipStream.Password = mima;
  oZipStream.SetLevel(9);

  var entry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(filename);
  oZipStream.PutNextEntry(entry);
  oZipStream.Write(ms.GetBuffer(), 0, (int)ms.Length);

  oZipStream.Finish();
  oZipStream.Close();
}

Last updated