URL: https://linuxfr.org/forums/programmation-c--2/posts/probl%C3%A8me-al%C3%A9atoire-dutilisation-de-la-zlib Title: problème aléatoire d'utilisation de la zlib Authors: Alexandre Boeglin Date: 2004年10月14日T21:57:10+02:00 Tags: Score: 0 Hello, je tente d'écrire un bout de code qui utilise la zlib afin de compresser/décompresser des fichiers. Vu que je souhaite accéder à ces fichiers (de plusieurs Go) de manière aléatoire, j'ai choisi de découper le fichier à compresser en blocs (de 32ko, par exemple) puis de compresser chacun des blocs indépendament, en maintenant une table qui indique pour chaque bloc son offset dans le fichier, et sa taille compressée. déjà, si il existe une meilleure méthode que celle que je me propose d'utiliser, j'y suis ouvert ;) ensuite, mon problème est le suivant : la compression et la décompression se passent bien (de manière générale), mais pour certains blocs, la décompression échoue avec un Z_DATA_ERROR (-3) et le message que je récupère de la zlib est "invalid block type", ce qui voudrait dire que les données sont corrompues. par contre, si dans la foulée je compresse puis décompresse ce bloc (sans passer par l'écriture sur le disque dur, donc), l'erreur n'apparaît pas... le code et les données sont sur : [http://boeglin.org/zlib/(...)](http://boeglin.org/zlib/) , il y a en gros : 0.1/* : le code complet, qui devrait tourner sur des fichiers volumineux badblock_uncomp et badblock_comp : un bloc de 32ko qui ne "passe" pas, décompressé et compressé compress.c, uncompress.c : compresse et décompresse un seul bloc test.c : compresse et décompresse sans passer par le disque version : la version de mon paquet zlib voilà, si quelqu'un a déjà vu celà, ou bien a quelques minutes à perdre, ca pourrait m'aider, vu que je n'ai pas l'impression d'avoir oublié quelque chose... d'avance, merci ;) P.S. : oui, j'ai bien lu la doc dans le zlib.h, et la faq de zlib... P.P.S. : j'ai aussi fait une version utilisant directement deflate() et inflate() en Z_FULL_FLUSH et j'arrive au même résultat.

AltStyle によって変換されたページ (->オリジナル) /