0

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

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

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

问题是当我尝试使用 GZipStream 解压缩它时,它说幻数不正确。

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

4

2 回答 2

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、data 和 iso 文件的简单压缩/解压缩自定义任务,我就会使用它,直到那个时候,我'将坚持使用开源命令行实用程序。

当然,您可以编写一个解决方案,但这个方案太容易实现了。对于处理 zip 文件,没有原生的 .NET 库(至少现在还没有)。现在支持处理 zip 文件内的压缩流,但不导航存档本身。

现在,正如我之前提到的,有很多像 Sourceforge 上的开源 zip 实用程序。这些在 Win2003 Server x64 上运行良好,我可以证明这一点。

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

于 2012-04-15T20:54:45.577 回答
0

首先,从其他遇到过各种问题的用户那里,GZipStream 不应该使用,因为它有错误。它不会正确压缩短字符串,也不会检测到损坏的压缩数据。这是一个非常糟糕的实现。

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

于 2012-04-16T04:12:34.423 回答