今天在使用C#的ZipArchive类生成zip文件的时候,解压缩一直报【文件末端错误】,但是不影响解压,解压的文件也正常打开。
本着Geek的思想,终于找到了解决方案,先附上解决的资料:
1.实例ZipArchive的时候,leaveOpen参数得是true
2.用完了的ZipArchive要手动释放
3.使用了MemoryStream要调用Flush方法,以便释放缓冲区。
上Demo代码
var memoryStream = new MemoryStream();
//第三个参数必须是true
var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true);
var files = new List<Stream>();//这里是要压缩的文件流
foreach (var file in files)
{
var item = zipArchive.CreateEntry("每个待压缩的文件的文件名",CompressionLevel.NoCompression);
await using var entryStream = item.Open();
await file.stream.CopyToAsync(entryStream);
await file.stream.DisposeAsync();
}
zipArchive.Dispose();//LeaveOpen为true是,释放该资源,memoryStream才不是空
memoryStream.Seek(0, SeekOrigin.Begin);
await memoryStream.FlushAsync();//强制刷新缓冲区 这句话很关键
return new FileStreamResult(memoryStream, "application/zip")
{
FileDownloadName = "输出.zip"
};
这样就能愉快的在接口中输出Zip文件了。