C# ZipArchive 文件末端错误 的解决方案

今天在使用C#的ZipArchive类生成zip文件的时候,解压缩一直报【文件末端错误】,但是不影响解压,解压的文件也正常打开。

本着Geek的思想,终于找到了解决方案,先附上解决的资料:

c# - ZipArchive gives Unexpected end of data corrupted error - Stack Overflowhttps://stackoverflow.com/questions/47707862/ziparchive-gives-unexpected-end-of-data-corrupted-error/47707973下面说下解决步骤:

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文件了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值