2009-02-02 10 views
6

Da MSDN: DeflateStream ClassDeflateStream 4GB Limit NET

DeflateStream non può essere utilizzato per comprimere file superiori a 4 GB  .

Esistono altre implementazioni per .NET senza il limite di 4   GB?

NOTA: ho davvero bisogno di decomprimere un file in formato GZ con contenuto maggiore di 4   GB. Qualche codice può farlo?

risposta

2

Dai uno sguardo allo SharpZipLib. Non sono sicuro se è soggetto alla stessa limitazione, ma vale la pena dare un'occhiata.

1

Dando un'occhiata, sembra che molte persone abbiano riscontrato questo problema. System.IO.Compressio.DeflateStream clarifications please sembra essere il più completo.

L'unica implementazione sono stato in grado di trovare che sembra superare questo problema utilizzando Zip64 è Xceed Zip for .NET.

Tuttavia, è molto costoso e non sono sicuro che soddisferà le vostre esigenze.

Edit:

Ci sembra essere un certo numero di implementazioni di Zip64 per .NET, ma non riesco a trovare qualcuno che sono liberi.

+0

Tale thread esterno non è utile. È pieno di supposizioni e sbagliate. DeflateStream non conserva tutti i dati del flusso in memoria - questo non è il motivo della limitazione di 4 gb. – Cheeso

+0

DotNetZip è una libreria .NET gestita per file ZIP, che fa ZIP64. È gratuito (gratis + libre), anche se le donazioni sono incoraggiate. ZIP64 è una soluzione a un problema diverso rispetto a quello del poster originale, la limitazione del deflateStream BCL. – Cheeso

7

C'è sample code at CodeProject utilizzando la libreria 7-Zip.

La licenza è aperta, quindi dovresti poterlo utilizzare nel tuo progetto.

7-Zip supporta anche i file GZ.

+0

Voterebbe questo se avessi ancora dei voti, questo mi sembra buono e guardando il registro delle modifiche ho il supporto per Zip64. –

+0

Molto meglio di SharpZipLib (che è una facciata per zlib). 7zip è fantastico. – RobS

1

Cerca librerie che supportano DEFLATE64 (non Zip64, che è un'estensione del formato di file ZIP). Xceed Zip for .NET supporta Deflate64 e sono sicuro che anche altri lo facciano.

+0

Ehm, no. deflate64 non ha assolutamente nulla a che fare con la dimensione dei dati.Differisce solo da deflate nel fornire una finestra scorrevole 64K invece di una finestra scorrevole 32K. –

8

proposito, abbiamo rimosso il limite di 4 GB da DeflateStream NET 4.

+0

cool! Ma lo stavo aspettando;) –

+0

Ma qualcuno come me che sta sgonfiando file gzippati in SSIS è sfortunato - voi ragazzi avete saltato rilasciando una nuova versione con vs2010/sql2008 r2 :( – Burg

0

DotNetZip fa ZIP64 per NET, ed è libero. Ma Zip64 non è lo stesso di Deflate64.

0

Anche se quella documentazione dice che la limitazione di 4 GB è sia per DeflateStream che per GZipStream, solo GZipStream è limitato a causa del checksum CRC32. Se non hai bisogno di CRC32, usa DeflateStream.

+0

Interessante. Domande di coppia. # 1: Sei # 2 Perché il CRC32 limita la dimensione dei dati che possono essere compressi? # 3. Qual è la fonte delle tue informazioni? (conosci l'implementazione DeflateStream, o cosa?) – Cheeso

+0

Ciao, 1. Sono assolutamente sicuro - l'ho provato. 2. Vedi Wikipedia: http://en.wikipedia.org/wiki/Cyclic_redundancy_check 3. Ho usato .NET Reflector (http: //www.red-gate .com/products/reflector /) per dare un'occhiata al codice: la limitazione di 4 GB viene completamente ignorata se CRC32 non viene utilizzato. –