J'ai commencé à utiliser zlib 1.2.5 et je ne vois pas la routine d'extraire d'un fichier zip? J'ai lu sur un minizip application, une partie de la distribution.
Oui, il le fait bien. (Mais si jamais vous n'aimez pas le code en C, vous devriez regarder les 7-zip kit de développement logiciel qui code en C++ et C#.)
Toutes les fonctions de parcourir et de décompresser les fichiers d'une archive zip sont: unzip.h
Toutes les fonctions de compresser et ajouter des fichiers à une archive zip sont: zip.h
par exemple la décompression:
le unzOpen() fonctions de votre fichier zip retourne un unzFile
ensuite utiliser unzGoToFirstFile() et unzGoToNextFile() sur ce unzFile à parcourir tous les fichiers dans l'archive.
ensuite, vous obtenez le fichier info pour chaque fichiers avec unzGetCurrentFileInfo(), à savoir pour sa taille,
sûrement vous devriez appeler unzOpenCurrentFile() à un certain moment.
et appel unzReadCurrentFile() à l'aide de la taille de fileinfo, récupérer le contenu binaire du fichier archivé.
optionnellement, il est une structure opaque, vous pouvez fournir pour l'utilisation de votre propre fonction d'e/s, mais, évidemment, il y a un défaut win32 mise en œuvre pour l'accès aux fichiers, de sorte que vous pouvez même vous inquiétez pas à ce sujet.
PS: et n'oubliez pas d'appeler unzCloseCurrentFile()
Ok, j'ai trouvé les fonctions et je suis en utilisant miniunzip afin de le tester. J'ai créé un fichier c:\a.zip avec 7zip. Il contient un seul fichier. - Je exécuter miniunzip -x c:\a.zip -d c:\reza et et unzOpen2_64 échoue. Je suis en cours d'exécution sur ce Windows. Toute réflexion sur pourquoi est-ce le cas? Ces liens sont morts. merci pour la remarque. J'ai mis à jour les liens vers le point de github.com/madler/zlib/blob/master/contrib/minizip
Pas par lui-même, non. Voir le répertoire contrib/minizip dans la zlib distribution.
Il n'y a pas un tutoriel là, mais le minizip zip.source c est exactement pour IO (donc vraisemblablement de compression et de décompression) sur des fichiers zip avec zlib.
J'ai construit un wrapper autour de minizip en ajoutant quelques fonctionnalités que j'avais besoin et de le rendre plus agréable à utiliser. Est l'utilisation de la dernière c++11 et est développé à l'aide de Visual Studio 2013 (doit être portable, mais je ne l'ai pas testé sur unix)
vous pouvez compresser des dossiers complets, des ruisseaux, des vecteurs, etc. Également une fonctionnalité intéressante est de tout faire entièrement en mémoire.
Est-il possible de remplacer des éléments dans un dossier zip avec votre enveloppe? J'ai un cas où j'ai besoin d'extraire un fichier à partir d'un zip, de faire quelques changements et l'écrire dans le zip (en écrasant ce qui est là maintenant) sans écraser l'ensemble du fichier zip. On dirait que je pourrais utiliser le unzipper classe de première d'extraire et de modifier le fichier, puis utilisez la fonction ajouter de la fermeture à glissière de classe avec le même nom de fichier pour le remplacer. minizip ne dispose pas de cette fonctionnalité, pas même les supprimer de l'archive zip. Je pense que le standard zip donne la possibilité de le faire, mais il devrait être mis en œuvre sur minizip premier et a ajouté plus tard pour ces wrapper. C'était plus axé sur la compression de données, spécialement dans la mémoire interne de l'utilisation des applications où la plaine de compresion était le but, mais pas vraiment orientée ou destiné à être utilisé pour éditer et modifier les fermetures à glissières.
Oui, il le fait bien. (Mais si jamais vous n'aimez pas le code en C, vous devriez regarder les 7-zip kit de développement logiciel qui code en C++ et C#.)
unzip.h
zip.h
(regardez contrib\minizip\décompresser.h et contrib\minizip\zip.h)
par exemple la décompression:
le
unzOpen()
fonctions de votre fichier zip retourne ununzFile
ensuite utiliser
unzGoToFirstFile()
etunzGoToNextFile()
sur ceunzFile
à parcourir tous les fichiers dans l'archive.ensuite, vous obtenez le fichier info pour chaque fichiers avec
unzGetCurrentFileInfo()
, à savoir pour sa taille,sûrement vous devriez appeler
unzOpenCurrentFile()
à un certain moment.et appel
unzReadCurrentFile()
à l'aide de la taille de fileinfo, récupérer le contenu binaire du fichier archivé.optionnellement, il est une structure opaque, vous pouvez fournir pour l'utilisation de votre propre fonction d'e/s, mais, évidemment, il y a un défaut win32 mise en œuvre pour l'accès aux fichiers, de sorte que vous pouvez même vous inquiétez pas à ce sujet.
PS: et n'oubliez pas d'appeler unzCloseCurrentFile()
Ces liens sont morts.
merci pour la remarque. J'ai mis à jour les liens vers le point de github.com/madler/zlib/blob/master/contrib/minizip
OriginalL'auteur Stephane Rolland
À partir de: http://www.zlib.net/zlib_faq.html#faq11 :
11. Peut zlib poignée .les archives zip?
Pas par lui-même, non. Voir le répertoire contrib/minizip dans la zlib distribution.
Il n'y a pas un tutoriel là, mais le minizip zip.source c est exactement pour IO (donc vraisemblablement de compression et de décompression) sur des fichiers zip avec zlib.
Et toujours pas de tuto MAIS http://www.winimage.com/zLibDll/minizip.html donne plus de détails.
OriginalL'auteur Kirt Undercoffer
J'ai construit un wrapper autour de minizip en ajoutant quelques fonctionnalités que j'avais besoin et de le rendre plus agréable à utiliser. Est l'utilisation de la dernière c++11 et est développé à l'aide de Visual Studio 2013 (doit être portable, mais je ne l'ai pas testé sur unix)
Il y a une description complète ici: https://github.com/sebastiandev/zipper
vous pouvez compresser des dossiers complets, des ruisseaux, des vecteurs, etc. Également une fonctionnalité intéressante est de tout faire entièrement en mémoire.
minizip ne dispose pas de cette fonctionnalité, pas même les supprimer de l'archive zip. Je pense que le standard zip donne la possibilité de le faire, mais il devrait être mis en œuvre sur minizip premier et a ajouté plus tard pour ces wrapper. C'était plus axé sur la compression de données, spécialement dans la mémoire interne de l'utilisation des applications où la plaine de compresion était le but, mais pas vraiment orientée ou destiné à être utilisé pour éditer et modifier les fermetures à glissières.
OriginalL'auteur Sebastian