2011-08-30 12 views
8

Esiste una libreria per la creazione di file zip (lo zip file format non gzip o qualsiasi altro formato di compressione) al volo (così posso iniziare a inviare il file mentre è compressione) per file di grandi dimensioni (4 GB e successivi).Libreria di compressione zip al volo in C per lo streaming

Il rapporto di compressione non è rilevante (principalmente file multimediali).

La libreria deve avere un'interfaccia c e funzionare su Debian e OSX.

+0

Quale sistema operativo stai cercando? – karlphillip

+0

@karlphillip Ci scusiamo. È necessario il supporto per Debian e OSX. –

risposta

4

libarchive supporta qualsiasi formato voglio, al volo e anche i file in memoria.

+0

Sembra molto promettente. Verificherò –

3

zlib supporta la compressione da blocchi. dovresti essere in grado di iniziare a inviare un piccolo blocco subito dopo averlo compresso, mentre la libreria sta ancora comprimendo il blocco successivo. (Vedi this example)

(purtroppo, la tabella di file viene memorizzato alla fine del file zip, in modo che il file sarà inutilizzabile fino a quando non è stata completata sul lato ricevitore)

+0

Avevo l'impressione che zlib non fosse in grado di gestire i file zip? Vedi http://www.zlib.net/zlib_faq.html#faq11 –

+1

Non vero per i file zip, la directory viene aggiunta alla fine per semplificare l'accesso casuale, ma le voci dei file vengono scritte in modo sequenziale. La directory alla fine è solo per comodità. –

+0

@DanielW: lo stesso link delle FAQ fa riferimento a 'contrib/minizip' che crea i file zip usando zlib, quindi è ovviamente possibile. – Hasturkun

1

Mentre questa domanda è vecchia e già risposta, noterò una nuova potenziale soluzione per coloro che lo trovano.

avevo bisogno di qualcosa di molto simile, una biblioteca portatile e molto piccolo che ha creato gli archivi ZIP in modo di streaming in C. Non trovando tutto ciò che faceva al caso ho creato uno che utilizza zlib, disponibile qui:

https://github.com/CTrabant/fdzipstream

Questo codice dipende solo da zlib e fornisce essenzialmente un'interfaccia semplice per la creazione di archivi ZIP. Soprattutto (per me) l'output può essere trasmesso in streaming a una pipe, a un socket, a prescindere dal fatto che il flusso di output non debba essere ricercabile. Il codice è molto piccolo, un singolo file sorgente e un file di intestazione. Funziona su OSX e Linux e probabilmente altrove. Spero che aiuti qualcuno oltre a me ...

Problemi correlati