我无法使用C#正确解压缩文件

时间:2012-04-15 20:51:10

标签: c# compression

您好我正在尝试使用GZipStream压缩文件。

我创建了自己的扩展程序,我们称之为.myextension

我尝试压缩.myextension并保持其扩展名。我的意思是我试图将.myextension压缩到相同的扩展名。示例:我有myfile.myextension和 我想将它压缩到myfile.myextension。有用。我可以很好地压缩我的文件。

问题在于,当我尝试使用GZipStream对其进行解压缩时,它表示幻数不正确。

我该如何解决?解压缩时我应该将扩展名更改为.gz吗?我应该以某种方式转换它吗?请帮帮我,我不知道如何继续。

2 个答案:

答案 0 :(得分:1)

这是一个常见的问题。我想为您提供与解决方案类似的主题:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427166&SiteID=1

'幻数'通常是一个固定值,并且经常出现一些随意的,可能无法辨认的。例如,一行代码可能包含:

If X = 31 then
    'Do Something
End If

在这种情况下,31是一个'幻数':它没有明显的意义(就编码而言,这是一个嘲笑的术语)。

文件(不同类型)通常将前几个字节设置为特定值,例如,具有前两个字节的文件,然后是十六进制数字42 4D是位图文件。这些数字是“幻数”(在这种情况下,42 4D对应于字符BM)。其他文件也有类似的“幻数”。

http://forums.microsoft.com/msdn/showpost.aspx?postid=1154042&siteid=1

当然,有人(团队)开发了一个简单的压缩/解压缩自定义任务,支持zip,bzip2,gzip,rar,cab,jar,daa和iso文件,我将使用它,直到那时,我会坚持使用开源命令行实用程序。

当然,你可以编写一个解决方案,但这个问题是如此低调。对于处理zip文件,没有本机.NET库(至少还没有)。现在支持在zip文件中处理压缩流,但不能导航存档本身。

现在,正如我之前提到的,有很多开源zip工具,比如sourceforge上的那些。这些在Win2003 Server x64上工作正常,我可以证明这一点。

但是,如果您坚持使用用于zip解压缩的.NET解决方案,请使用http://www.icsharpcode.net/OpenSource/SharpZipLib/,它是开源的,并且具有干净可靠的100%.NET实现。

答案 1 :(得分:0)

首先,来自其他有various issues的用户,不应该使用GZipStream,因为它有bug。它不会正确压缩短字符串,也不会检测损坏的压缩数据。这是一个非常糟糕的实施。

至于你的问题,其他使用GZipStream的人看到gzip数据的四字节前缀,这是未压缩字节的数量。如果将其写入文件,则会导致您遇到的问题。 gzip文件应以十六进制字节1f 8b开头。