2009-02-02 7 views
6

Von MSDN: DeflateStream ClassDeflateStream 4GB Grenze in .NET

DeflateStream können Dateien nicht verwendet werden, zu komprimieren, die größer als 4 GB  .

Gibt es andere Implementierungen für .NET ohne das Limit 4   GB?

HINWEIS: Ich muss wirklich eine Datei im GZ-Format mit Inhalten größer als 4   GB dekomprimieren. Kann irgendein Code das tun?

Antwort

2

Werfen Sie einen Blick auf SharpZipLib. Nicht sicher, ob es der gleichen Einschränkung unterliegt, aber einen Blick wert.

1

Wenn man sich umschaut, scheint es, dass eine Menge Leute auf dieses Problem gestoßen sind. System.IO.Compressio.DeflateStream clarifications please scheint das umfassendste zu sein.

Die einzige Implementierung konnte ich das finden, scheint dieses Problem zu überwinden Zip64 durch Verwendung ist Xceed Zip for .NET.

Allerdings ist es sehr teuer und ich bin mir nicht sicher, ob es Ihren Bedürfnissen entsprechen würde.

Edit:

Es scheint eine ganze Reihe von Implementierungen von Zip64 für .NET zu sein, aber ich kann keine finden, die frei sind.

+0

Dieser externe Thread ist nicht hilfreich. Es ist erfüllt mit Vermutungen und falschen. Der DeflateStream speichert nicht alle Stream-Daten im Speicher - das ist nicht der Grund für die Beschränkung von 4 GB. – Cheeso

+0

DotNetZip ist eine verwaltete .NET-Bibliothek für ZIP-Dateien, die ZIP64 unterstützt. Es ist kostenlos (gratis + libre), obwohl Spenden erwünscht sind. ZIP64 ist eine Lösung für ein anderes Problem als das ursprüngliche Poster gefragt - die Begrenzung des BCL DeflateStream. – Cheeso

7

Es gibt sample code at CodeProject mit der 7-Zip-Bibliothek.

Die Lizenz ist offen, Sie sollten diese also in Ihrem Projekt verwenden können.

7-Zip unterstützt auch GZ-Dateien.

+0

Würde dies stimmen, wenn ich noch einige Stimmen übrig hätte, scheint das ein guter zu sein, und wenn ich das Änderungsprotokoll anschaue, hat es Zip64-Unterstützung. –

+0

Viel besser als SharpZipLib (das ist eine Fassade für zlib). 7zip ist erstaunlich. – RobS

1

Suchen Sie nach Bibliotheken, die DEFLATE64 unterstützen (nicht Zip64, das ist eine Erweiterung des ZIP-Dateiformats). Xceed Zip for .NET unterstützt Deflate64, und ich bin sicher, andere tun es auch.

+0

Ähm, nein. deflate64 hat überhaupt nichts mit der Größe der Daten zu tun.Es unterscheidet sich von deflate nur darin, ein 64K-Schiebefenster anstelle eines 32K-Schiebefensters bereitzustellen. –

8

FYI, haben wir die 4-GB-Grenze von DeflateStream in .NET 4.

+0

cool! Ich warte darauf;) –

+0

Aber jemand wie ich, der Gzipped Dateien in SSIS deflationiert, ist kein Glück - Sie haben die Freigabe einer neuen Version mit vs2010/sql2008 r2 :( – Burg

0
entfernt

DotNetZip tut ZIP64 für .NET, und es ist kostenlos. Aber Zip64 ist nicht dasselbe wie Deflate64.

0

Obwohl diese Dokumentation besagt, dass die 4 GB-Beschränkung sowohl für DeflateStream als auch für GZipStream gilt, ist nur GZipStream wegen der CRC32-Prüfsumme eingeschränkt. Wenn Sie CRC32 nicht benötigen, verwenden Sie DeflateStream.

+0

Interessant. Paar Fragen. # 1: Bist du sicher, dass dies? # 2. Warum begrenzt der CRC32 die Größe der Daten, die komprimiert werden können? # 3. Was ist die Quelle Ihrer Informationen? (Sind Sie vertraut mit der DeflateStream-Implementierung, oder was?) – Cheeso

+0

Hallo, 1. Ich bin mir absolut sicher - ich habe es getestet 2. Siehe Wikipedia: http://en.wikipedia.org/wiki/Cyclic_redundancy_check 3. Ich verwendete .NET Reflector (http: //www.red-gate Der 4GB - Grenzwert wird komplett ignoriert, wenn CRC32 nicht verwendet wird. –