Присоединение к сжатому файлу с помощью GZipStream - PullRequest
4 голосов
/ 28 октября 2010

Я пытаюсь использовать GZipStream для написания некоторых трассировок приложений (они имеют тенденцию увеличиваться до огромных размеров в производстве). Так что в этом случае мне нужна возможность открыть существующий файл и добавить к нему, используя GZipStream. Кажется, что все работает хорошо, пока мы не попытаемся распаковать файл. Кажется, что при декомпрессии GZipStream читает только первый фрагмент данных и затем ведет себя так, как будто он достиг EOF (даже если файл содержит намного больше). Странно то, что при открытии файла с помощью Windows или Winrar все данные, как представляется, присутствуют и извлекаются правильно. Кто-нибудь сталкивался с этой проблемой раньше?

Ответы [ 2 ]

2 голосов
/ 19 октября 2012

Я столкнулся с той же проблемой.Идея состоит в том, чтобы реализовать что-то вроде того, что http://zlib.net/pigz/ делает

1 голос
/ 18 августа 2017

Мне понадобилось невероятно много времени, чтобы понять. Стандартная реализация C #, GZipStream имеет ошибку в том, что она не поддерживает сцепленные файлы gzip. Он будет распаковывать только первую часть файла gzip, созданного в результате объединения, и сообщит об окончании потока после этого.

Вот пример, который будет работать для сцепленных файлов gzip:

new StreamReader(new ICSharpCode.SharpZipLib.GZip.GZipInputStream(Console.OpenStandardInput()));

Вы можете получить нужную библиотеку из nuget. Я рекомендую версию Jetbrain, JetBrains.SharpZLib.Stripped. Nuget выдал ошибку, когда я попытался использовать другую опцию в проекте ядра .net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...