使用ZipFile类,通过Stream的方式进行zip打包
using (MemoryStream memory = new MemoryStream()) { using MemoryStream txt = new MemoryStream(Encoding.UTF8.GetBytes("这是一个测试")); using (ZipArchive archive = new ZipArchive(memory, ZipArchiveMode.Create, true)) { var demoFile = archive.CreateEntry("test.txt"); using (var entryStream = demoFile.Open()) using (var streamWriter = new StreamWriter(entryStream).BaseStream) { txt.Position = 0; txt.CopyTo(streamWriter); } } using (var fileStream = new FileStream($@"D:Desktop{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-dd-ss-fffffff")}.zip", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { memory.Position = 0; memory.CopyTo(fileStream); } } };
注意事项
1.ZipArchive的第三个参数必须为true,否则在进行保存时可能会出现stream以关闭的情况。
2.可能会出现保存的zip包无法打开的错误,大概描述为 文件末端错误 ,原因为stream的关闭顺序不正确,请仔细检查。