如何在 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 与 System.IO.MemoryStream 一起使用?