2012-04-15 64 views
0

你好,我试图压缩使用GZipStream的文件。我无法正确解压缩文件与C#

我已经创建了自己的延伸,我们称之为.myextension

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

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

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

+1

这与文件扩展名无关。你可以使用7-zip等应用程序解压缩压缩文件吗?如果是,您的解压缩代码可能包含错误;请发布代码。 – Yogu 2012-04-15 20:54:44

+1

它与文件扩展名无关。你需要留下更好的面​​包屑。 – 2012-04-15 20:55:00

+0

扩展不是问题,你是否在解压缩之前读取文件而不是字节[]?显示一些解压代码 – 2012-04-15 20:57:29

回答

1

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

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

A“幻数”通常是一个固定值,而且经常出现有些arbitary,可能难以辨认。例如,一行代码可以具有:

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文件中的压缩流,但不导航存档本身。

现在,正如我在前面提到的,有很多像sourceforge上的开源zip压缩工具。这些在Win2003 Server x64上运行良好,我可以证明这一点。但是,如果您坚持使用.NET解压缩zip解压缩,请使用http://www.icsharpcode.net/OpenSource/SharpZipLib/,它是开源的,并且具有干净可靠的100%.NET实现。

0

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

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