2008-11-06 7 views
10

Je suis à la recherche d'un emballage qui distille zlib à:C de multiplateformes zlib simplifer-wrapper

  1. OpenZipFile()
  2. GetItemInfo (n)
  3. UnzipItem (n) // points bonus pour décompresser récursivement si l'élément n est un répertoire.

Je vois beaucoup d'emballages autour de la bibliothèque zlib, disons, codeproject.com mais ils sont tous spécifiques à la plate-forme afin de fournir les fonctionnalités spécifiques à la plate-forme supplémentaire de décompressé pour déposer/mémoire tampon/tuyau.

+0

Vous avez déjà trouvé un projet sur CodeProject qui fait ce que vous voulez, la seule chose qui reste pour vous devez faire: FICHIER * fichier = fopen (nom de fichier, "wb"); fwrite (buf, buf_len, 1, fichier); fclose (fichier); –

Répondre

8

Dans l'archive source zlib, il existe une contribution nommée "minizip". "Minizip" est un ensemble de fichiers que vous pouvez utiliser pour lire des fichiers .zip. Les services de base dont vous avez besoin sont déjà là:

  • unzOpen
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • unzClose

Bien sûr, cela est pas orienté objet (et je suis sûr que ce n'était pas l'objectif de la c reator de minizip), mais écrire un simple wrapper orienté objet devrait être facile.

+0

Wow les fichiers ont 8 ans! heheh! – leeand00

+0

C'est dans cvs; Eh bien, je suppose que c'est ce qu'ils avaient pour le contrôle de version à l'époque .. – leeand00

+1

Hé, je m'en fous si c'est 8 ans, si ça va encore compiler je vais l'utiliser! – leeand00

2

Vous pouvez essayer d'extraire le code d'un autre projet FOSS. ScummVM, par exemple, a un wrapper Zlib hautement portable (implementation, header) avec toutes les fonctions dont vous avez besoin, plus une couche OO pour l'interfaçage générique avec tout autre type d'archive.

Peut-être que c'est un bon point de départ? Les fonctions wrapper sont totalement autonomes et portables (ils fonctionnent même sur une Nintendo DS), mais la couche OO dépend de nombreuses classes personnalisées qui peuvent être difficiles à ajouter à votre propre projet.

2

firstobject's easy zlib reste multiplate-forme; il a zlib dans un seul fichier easyzlib.c et n'expose que les fonctions ezcompress et ezuncompress avec la fonction supplémentaire de déterminer les besoins en mémoire avant d'allouer la taille exacte.

11

Dans boost :: iostreams, il est possible d'utiliser les formats zlib, gzip et bzip2.

Vous le trouvez de http://www.boost.org/

+0

boost :: iostream :: zlib_compressor n'est pas compatible avec le format zip réel –

1

GZStream vaut le détour. C'est un joli wrapper multiplateforme autour de ZLib qui étend les classes STL iostream.

http://www.cs.unc.edu/Research/compgeom/gzstream/

Ce qui est bien cette enveloppe sur quelques-uns des autres est que si vous travaillez avec des archives très importantes que vous n'avez pas besoin de charger l'ensemble des données dans la mémoire.

+0

Hé, ça a l'air sympa! 7 ans ... Je vais essayer de le compiler. – craesh

1

Si vous utilisez minizip - faites attention, la version fournie avec zlib 1.2.3 a une limitation de 2 Go pour le fichier zip. Il va produire du zip avec une taille> 2Go - mais vous ne pourrez pas les ouvrir ...