如何在 C# 中使用 GZipStream 解压缩?

Posted

技术标签:

【中文标题】如何在 C# 中使用 GZipStream 解压缩?【英文标题】:How to decompress with GZipStream in C#? 【发布时间】:2013-10-12 01:16:12 【问题描述】:

我的问题是我找不到解压缩文件的解决方案。 压缩文件没有错误消息,但我不知道这是否正确。

这是我压缩文件的代码:

using (StreamReader sr = new StreamReader(File.Open(srcFile, FileMode.Open), true))
using (GZipStream zip = new GZipStream(File.Open(destFile, FileMode.OpenOrCreate), CompressionMode.Compress, false))
using (StreamWriter sw = new StreamWriter(zip, Encoding.UTF8)) 
    while (!sr.EndOfStream) 
        sw.Write((char)sr.Read());
    

然后我尝试使用以下代码解压缩压缩文件:

using (GZipStream zip = new GZipStream(File.Open(srcFile, FileMode.Open), CompressionMode.Decompress, false))
using (StreamReader sr = new StreamReader(zip, true))
using (StreamWriter sw = new StreamWriter(File.Open(destFile, FileMode.OpenOrCreate), Encoding.UTF8)) 
    while (!sr.EndOfStream) 
        sw.Write((char)sr.Read());
    

解压后的内容和源文件的内容不一样,不知道哪里出错了。

提前感谢您的帮助。

我很抱歉我的英语不好,但英语不是我的强项。 :/

【问题讨论】:

尝试在您的GZipStream 上调用Flush(),然后再处理它。通常,Stream 上的 Dispose 将调用 Close,如果该流是缓存流(FileStream 等),它将在 Close 中调用 Flush,但 GZipStream 可能不会这样做。跨度> 【参考方案1】:

未指明使用 StreamReader/Writer。如果文件不是文本文件,它肯定会破坏文件内容。而且解压后的文件总会有一个BOM,原文件中可能会丢失。

没有理由使用这些类,GZipStream 不在乎。请改用 FileStream,这是确保解压缩字节与原始文件中的字节精确匹配的唯一方法。

【讨论】:

是的!它有效:) 此外代码比以前小。非常感谢:)

以上是关于如何在 C# 中使用 GZipStream 解压缩?的主要内容,如果未能解决你的问题,请参考以下文章

gzipstream 解压缩 UNIX 文件中止且没有错误

如何将 GZipStream 与 System.IO.MemoryStream 一起使用?

c# .net gzip压缩源码

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2 新增解压缩工具类ZipHelper

GZipStream - 块长度与其补码不匹配

在 .net 中以编程方式解压缩文件