解压缩压缩二进制文件

时间:2014-05-18 15:44:32

标签: c# vb.net winforms gzip zlib

我有压缩文件(二进制文件/压缩字符串 - 我不确定它是什么),
我试图通过c#/ vb.net解压缩这个文件,
我试图用Gzip解压缩它:

 Private Shared Function gzuncompress(ByVal data() As Byte) As Byte()
        Dim input As MemoryStream = New MemoryStream(data)
        Dim gzip As GZipStream = New GZipStream(input, CompressionMode.Decompress)
        Dim output As MemoryStream = New MemoryStream
        gzip.CopyTo(output)
        Return output.ToArray
    End Function


gzuncompress(New System.Net.WebClient().DownloadData("http://haxball.com/list3"))


但是有一个例外(其中:gzip.CopyTo(输出)):

The magic number in GZip header is not correct



但当我试图通过PHP解压缩它时,它工作:)。

php header('Content-Type: text/html; charset=utf-8');

$list = file_get_contents('http://haxball.com/list3');

$list = gzuncompress($list);

$len = implode('', unpack('n*', $list));

$bytes = unpack('c*', $list);

$string = implode('', array_map('chr', $bytes));

echo $string;


你可以在这里查看代码:
http://www.compileonline.com/execute_php_online.php
有人有php的gzuncompress c#/ vb.net替代?

即使有一个extarnal exe文件可以和php的gzuncompress函数一样,这将是非常好的答案,

有点:

Process.start("c:\umcompress.exe -f c:\list3 -o c:\res.txt")

注意:一个很好的例子比解释更好

更新: 文件的前30个字节:

78 DA 8C BD 79 F4 5D D7 55 26 78 65 0D F1 24 0F 89 E3 98 4C 5C 47 21 71 E2 C8 B9 E7 9E E1

1 个答案:

答案 0 :(得分:0)

这是zlib流。 zlib格式在RFC 1950中描述,由一个双字节头和一个围绕deflate流的四字节尾部组成。您需要编写自己的代码来处理标题和预告片,并且可以使用DeflateStream class解压缩deflate流。

或者您可以使用DotNetZip直接处理zlib流。

相关问题