您好我正在尝试使用GZipStream压缩文件。
我创建了自己的扩展程序,我们称之为.myextension
我尝试压缩.myextension并保持其扩展名。我的意思是我试图将.myextension压缩到相同的扩展名。示例:我有myfile.myextension和 我想将它压缩到myfile.myextension。有用。我可以很好地压缩我的文件。
问题在于,当我尝试使用GZipStream对其进行解压缩时,它表示幻数不正确。
我该如何解决?解压缩时我应该将扩展名更改为.gz吗?我应该以某种方式转换它吗?请帮帮我,我不知道如何继续。
答案 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
开头。