我正在尝试使用GZipStream来编写一些应用程序跟踪(它们倾向于在生产中增长到巨大)。所以在这种情况下,我需要能够打开一个现有的文件,并使用GZipStream追加到它。在我们尝试解压文件之前,所有的东西似乎都运行良好。看来在解压缩时,GZipStream只读取第一块数据,然后表现得像EOF(即使文件包含更多)。奇怪的是,当使用Windows或Winrar打开文件时,所有数据似乎都存在并被正确提取。 有没有人遇到过这个问题?使用GZipStream追加压缩文件
回答
我遇到了同样的问题。 这个想法是实现像http://zlib.net/pigz/那样的东西
我会接受这一点,但在目前的形式它不提供很多信息,除了“去那个链接”。如果你喜欢编辑它并解释一下zlib的作用,以及如何应用在这种情况下,你会得到接受:) - 这不像是有很多竞争者 – 2012-10-25 13:01:46
这不是我接受和接受积分囤积,我只是喜欢SOF居民互相帮助:) 这个想法是删除旧的gzip块(页脚)的最后8个字节,从页脚中提取CRC和大小,然后添加一些零,然后添加新的块然后重新计算新旧块大小和CRC的源大小和CRC,并替换所产生的页脚。这里的问题是,我没有找到如何根据两部分CRC进行有效总和的CRC。另外新的块需要首先移除它的头部。 – 2012-10-25 21:49:06
pigz做的也是在大块之间共享一些字典数据,并且它完成了上述所有内容,因此您可以查看源代码。如果你已经用.NET实现了,请告诉我,我已经放弃了这种方法,并添加了块分隔符和一个读取程序,它可以逐块提供数据进行解压缩。 – 2012-10-25 21:51:28
这花了我花了很长时间才弄清楚。标准的C#实现,GZipStream有一个bug,它不支持连接的gzip文件。它只会解压缩由串联创建的gzip文件的第一部分,并在此之后报告流结束。
这里是将为串连的gzip文件的示例:
new StreamReader(new ICSharpCode.SharpZipLib.GZip.GZipInputStream(Console.OpenStandardInput()));
你可以得到你的NuGet需要的库。我推荐jetbrain的版本,JetBrains.SharpZLib.Stripped。当我尝试使用.net核心项目中的其他选项时,Nuget抛出错误
- 1. 使用GZipStream解压缩.gz文件
- 2. 用GZipStream压缩
- 3. GzipStream文件块压缩
- 4. GZipStream使用4.5解压缩压缩文件4.0
- 5. GZipStream不压缩?
- 6. C#GZipStream - 压缩MemoryStreams
- 7. 解压缩gzipstream从
- 8. 将压缩的gzipstream写入文件
- 9. C#GZipStream压缩不写入文件
- 10. C# - 文件压缩重命名操作或压缩没有GZipStream
- 11. 编程压缩/解压缩与GZipStream
- 12. 可以使用DeflateStream或GZipStream来压缩未压缩的文件吗?
- 13. PHP可以解压缩使用.NET GZipStream类压缩的文件吗?
- 14. 使用GZipStream C压缩/解压缩问题#
- 15. 如何使用GZipStream压缩/解压缩目录?
- 16. 如何使用GZipStream压缩或Zip整个文件夹
- 17. 如何使用GZipStream解压缩内存中的gz文件?
- 18. C#缓冲GZipStream压缩
- 19. 问题与解压缩,GZipStream
- 20. GZipStream解压缩性能差
- 21. 为什么使用GZipStream压缩HTTP响应时CSS文件不加载?
- 22. FTP + GZipStream =解压缩文件时'文件已损坏'
- 23. 如何使用GZipStream类压缩GZip文件中的多个文件?
- 24. gzipstream解压缩UNIX文件中止没有错误
- 25. c#中压缩文件的时间戳GzipStream
- 26. 使用zlib附加到压缩文件
- 27. 使用Java压缩加密文件
- 28. GZipStream压缩问题(丢失字节)
- 29. System.OutofMemoryException在执行GZipStream压缩时抛出
- 30. .NET GZipStream解压缩生成空流
可能重复[追加到压缩流](http://stackoverflow.com/questions/4046011/append-toa-a-压缩流) – 2011-05-27 12:13:50