8
votes

Bibliothèque de compression zip sur la mouche en C pour la diffusion en continu

Y a-t-il une bibliothèque pour la création de fichiers zip (le format de fichier zip non GZIP ou tout autre format de compression) On-The-Fly (afin que je puisse commencer à envoyer le fichier pendant la compression) pour les fichiers très volumineux (4 Go et plus).

Le taux de compression n'a pas beaucoup d'importance (principalement des fichiers multimédia).

La bibliothèque doit avoir une interface C et travailler sur Debian et OSX.


1 commentaires

@karlphillip désolé pour ça. Le soutien Debian et OSX est nécessaire.


3 Réponses :


3
votes

ZLIB soutient la compression par des morceaux. Vous devriez pouvoir commencer à envoyer un petit morceau juste après la compression, tandis que la bibliothèque comprimait toujours le prochain morceau. (Voir Cet exemple )

(Malheureusement, la table de fichiers est stockée à la fin du fichier zip, le fichier sera donc inutilisable jusqu'à ce qu'il soit terminé sur le côté récepteur)


7 commentaires

J'étais sous l'impression que Zlib ne peut pas gérer les fichiers zip? Voir zlib.net/zlib_faq.html#faq11


Pas VRAI À propos des fichiers Zip, le répertoire est ajouté à la fin pour simplifier l'accès aléatoire, mais les entrées de fichier elles-mêmes sont écrites de manière séquentielle. Le répertoire à la fin n'est que pour la commodité.


@Danielw: Cette même faq Link pointe sur contributions / minizip qui crée des fichiers zip à l'aide de ZLIB, donc cela peut évidemment.


@Hasturkun no. Le projet Minizip a une dépendance ZLIB et peut lire des fichiers ZIP. Cela ne signifie pas automatiquement que Minizip dispose de prendre en charge la compression à la volée et ne signifie pas que ZLIB prend en charge les fichiers ZIP. Si la réponse a été formulée comme suit: Vous pouvez facilement créer cette liste de diffusion à zéro à l'aide de ZLIB ou vous pouvez vérifier si MINIZIP dispose d'un support pour la compression à la volée, je serais plus enclin à la marquer comme accepté.


Eh bien, techniquement, vous vous dirige vers une bibliothèque puis vous disant de vérifier vous-même n'est pas une réponse à votre question ... C'est pourquoi je ne corrigerai pas cette réponse.


Aussi, j'ai consulté la bibliothèque Lzma hébergée sur 7-zip.org : il prend en charge la décompression dans des morceaux mais ne pas compresser ...


Maintenant, il y a une autre réponse qui semble plus valable que la mienne, je envisage de supprimer cette réponse ...



4
votes

LibarRarchive prend en charge tout format que vous souhaitez, à la volée et même dans les fichiers en mémoire.


1 commentaires

Semble très prometteur. Va vérifier.



2
votes

Bien que cette question soit ancienne et déjà répondue, je noterai une nouvelle solution potentielle pour ceux qui le trouvent.

J'avais besoin de quelque chose de très similaire, d'une bibliothèque portable et très petite qui a créé des archives zips dans une mode en streaming en C. Ne pas trouver quoi que ce soit qui convient à la facture que j'ai créée, qui utilise Zlib, disponible ici:

https://github.com/ctrabant/fdzipstream

Ce code dépend uniquement de ZLIB et fournit essentiellement une interface simple pour créer des archives zip. Plus important encore (pour moi), la sortie peut être diffusée sur un tuyau, une prise, tout comme le flux de sortie n'a pas besoin de rechercher. Le code est très petit, un fichier source unique et un fichier d'en-tête. Fonctionne sur OSX et Linux et probablement ailleurs. J'espère que cela aide quelqu'un au-delà de moi ...


0 commentaires