2009-02-02 3 views
6

Из MSDN: DeflateStream ClassDeflateStream 4GB Ограничить в .NET

DeflateStream не может быть использована для сжатия файлов размером более 4 ГБ  .

Есть ли какие-либо другие реализации для .NET без ограничения 4   GB?

ПРИМЕЧАНИЕ. Мне действительно нужно распаковать файл в формате GZ с контентом более 4   ГБ. Может ли любой код сделать это?

ответ

2

Посмотрите на SharpZipLib. Не уверен, что это подлежит одному и тому же ограничению, но стоит посмотреть.

1

Оглянувшись, кажется, что многие люди столкнулись с этой проблемой. System.IO.Compressio.DeflateStream clarifications please представляется наиболее полным.

только реализация я был в состоянии обнаружить, что, кажется, чтобы преодолеть эту проблему с помощью ZIP64 является Xceed Zip for .NET.

Однако, это очень дорого, и я не уверен, что он удовлетворит ваши потребности.

Edit:

Там, кажется, довольно много реализаций ZIP64 для .NET, но я не могу найти, что свободны.

+0

Эта внешняя резьба не помогает. Он наполнен предположениями и неправильными. DeflateStream не сохраняет все данные потока в памяти - это не является причиной ограничения 4gb. – Cheeso

+0

DotNetZip - это управляемая библиотека .NET для ZIP-файлов, которая делает ZIP64. Это бесплатно (бесплатно + libre), хотя пожертвования поощряются. ZIP64 - это решение другой проблемы, о которой спрашивал исходный плакат - ограничение использования BCL DeflateStream. – Cheeso

7

Существует sample code at CodeProject с использованием библиотеки 7-Zip.

Лицензия открыта, поэтому вы можете использовать ее в своем проекте.

7-Zip также поддерживает файлы GZ.

+0

Если бы у меня осталось несколько голосов, это похоже на хороший, и просмотр журнала изменений имеет поддержку Zip64. –

+0

Лучше, чем SharpZipLib (это фасад для zlib). 7zip потрясающе. – RobS

1

Ищите библиотеки, поддерживающие DEFLATE64 (не Zip64, это расширение формата ZIP-файла). Xceed Zip for .NET поддерживает Deflate64, и я уверен, что другие тоже делают это.

+0

Um, no. deflate64 не имеет ничего общего с размером данных.Он отличается от дефлята тем, что он обеспечивает скользящее окно на 64 КБ вместо 32К скользящего окна. –

8

FYI, мы удалили предел 4 ГБ из DeflateStream в .NET 4.

+0

круто! Я жду этого;) –

+0

Но кто-то вроде меня, который сбрасывает gzip-файлы в SSIS, не повезло - вы, ребята, пропустили выпуск новой версии с vs2010/sql2008 r2 :( – Burg

0
DotNetZip

делает ZIP64 для .NET, и это бесплатно. Но Zip64 - это не то же самое, что Deflate64.

0

Несмотря на то, что в документации указано, что ограничение на 4 ГБ распространяется как на DeflateStream, так и на GZipStream, только GZipStream ограничен из-за контрольной суммы CRC32. Если вам не нужен CRC32, используйте DeflateStream.

+0

Интересно. Пара вопросов. # 1: Вы уверен в этом? # 2. Почему CRC32 ограничивает размер данных, которые могут быть сжаты? 3. Что является источником вашей информации? (знакомы ли вы с реализацией DeflateStream или что?) – Cheeso

+0

Привет, 1. Я абсолютно уверен - я его протестировал. 2. См. Wikipedia: http://en.wikipedia.org/wiki/Cyclic_redundancy_check 3. Я использовал .NET Reflector (http: //www.red-gate .com/products/reflector /), чтобы заглянуть в код. Ограничение 4 ГБ полностью игнорируется, если CRC32 не используется. – 2009-08-29 17:04:02

Смежные вопросы