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