распаковка сжатого двоичного файла

1

У меня сжатый файл (двоичный файл/сжатая строка - я не уверен, что это такое),
Я пытаюсь распаковать этот файл с помощью С#/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(output)):

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 С#/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
Теги:
winforms
gzip
zlib

1 ответ

0

Это поток zlib. Формат zlib описан в RFC 1950 и состоит из двухбайтового заголовка и четырехбайтового трейлера вокруг потока дефлятирования. Вам нужно будет написать свой собственный код для обработки заголовка и трейлера, и вы можете использовать класс DeflateStream для распаковки потока дефляции.

Или вы можете использовать DotNetZip, который будет обрабатывать поток zlib напрямую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню