À l'aide de la librairie zlib compresser un répertoire
J'ai une application C++ qui nécessite l'utilisation d'un format de compression standard pour un répertoire.
J'ai pensé à utiliser le format zip.
Et donc, zlib était évident.
Mon problème est la construction du dictionnaire, c'est à dire compresser un répertoire contenant des fichiers avec zlib à un standard de fichier zip.
J'ai lu que zlib le fait, mais je ne comprends pas comment. J'ai vérifié minzip code. Il semble qu'il utilise gzip. J'ai pu construire mon propre format, mais je veux être en mesure d'ouvrir ces fichiers avec 7z pour le débogage (au cas où).
Que dois-je utiliser dans zlib pour compresser un répertoire?
[modifier]
Dans minzip
J'ai utilisé minzip pour compresser 1 fichier dans sa version gz -> pas de zip, mais bien pour moi. (J'en ai que sur les différents compilateurs dans le monde, ayant un format standard est plus facile dans le cas où il ya un problème sur la plate-forme du client)
Aussi, il y a ce code dans main
. Il fait une boucle sur une liste de fichiers et de l'écrit à une sortie.
Mais où se trouve l'information sur l'emplacement du fichier dans l'archive?
do {
if (uncompr) {
if (copyout) {
file = gzopen(*argv, "rb");
if (file == NULL)
fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
else
gz_uncompress(file, stdout);
} else {
file_uncompress(*argv);
}
} else {
if (copyout) {
FILE * in = fopen(*argv, "rb");
if (in == NULL) {
perror(*argv);
} else {
file = gzdopen(fileno(stdout), outmode);
if (file == NULL) error("can't gzdopen stdout");
gz_compress(in, file);
}
} else {
file_compress(*argv, outmode);
}
}
} while (argv++, --argc);
Désolé si c'est évident.
zip
de faire le travail, n'est-ce pas plus simple et plus robuste?Dans zlib
contrib
dossier, il y est minizip
.Oui j'ai vu cela, mais je ne vois pas non plus comment passer d'un dossier. Peut-être une liste de fichiers. mais alors, comment construire le dictionnaire ?
OriginalL'auteur dzada | 2013-09-10
Vous devez vous connecter pour publier un commentaire.
Regarder minizip.c pour un exemple d'utilisation de minizip de créer des fichiers zip. minizip est dans le répertoire contrib de la zlib de distribution, ce qui signifie qu'il est de la troisième partie ont contribué au code. Il ne fait pas partie de la bibliothèque zlib.
Noter que gzip n'est pas zip. La zlib format n'est pas zip. Raw dégonfler données n'est pas zip. Ceux-ci sont tous différents formats. Raw dégonfler données est l'un des formats compressés permis dans le format zip, et, en fait, est le plus commun. zlib est utile pour le traitement des fichiers zip, mais il ne le fait pas par lui-même. zlib par lui-même ne fournit que de la compression et de décompression de moteurs et de calcul de CRC.
OriginalL'auteur Mark Adler
Ne pas mélanger zip standard pour archive, ce qui peut containe plusieurs fichiers, et zlib - qui est utilisé dans le zip pour compresser le fichier/flux de données. Pour compresser un répertoire, vous devez utiliser minizip/infozip ou toute autre bibliothèque qui est compatible avec ZIP format d'archive.
Il n'y a aucun. gzip juste compresse les données brutes - ce n'est pas un format d'archive; il n'a pas de notion de fichiers.
Ok, et est-il une lib que je peux utiliser pour construire ce dictionnaire?
J'ai trouvé libzip, mais je ne sais pas si c'est fiable et il ne marche pas construire sans corrections sur mon système d'exploitation (Mac et Windows)
OriginalL'auteur Nickolay Olshevsky
J'ai été un malentendu un peu de ZIP et de compression.
Finalement j'ai décidé de mettre en œuvre l'archive ZIP format suivant wikipédia, ce page. Et j'ai largement utilisé HxD outil sur windows et 7z de tester un grand nombre.
À la fin j'ai trouvé que le format de l'archive est simple, et je soutiens seulement 1 disque, N fichiers avec des répertoires, et la compression basée sur la librairie zlib.
J'utilise aussi zlib pour la somme de contrôle crc32.
donc si quelqu'un a ce problème dans le futur, voir le format zip sur wikipédia et l'utilisation zlib pour crc32, alors si vous voulez compresser vos morceaux avec zlib.
Merci à vous tous
OriginalL'auteur dzada