J'essaye d'utiliser zlib.
En faisant un programme qui est censé afficher le contenu d'un fichier
compressé, je me rencontre un problème : les données sont différent selon
la taille de mon buffer.
En bon débutant, j'imagine que la zlib est parfaitement stable et que
c'est moi le bug ;-)
J'ai donc fait un programme de test pour illustrer mon problème.
L'idée est d'afficher la taille totale lue du fichier compressé pour
chaque taille de buffer.
Je n'arrive vraiment pas à trouver où mon code cloche, je le soumet donc
aux esprits éclairés de ce ng.
Attention, tu indiques ici que la fonction va modifier "zFilePath".
unsigned szRead;
Beurk. La notation hongroise est (normalement) abandonnée depuis longtemps, surtout en C++. En fait, il s'agissait au départ d'une bonne idée, mais comprise totalement de travers. Plus d'infos ici : http://www.joelonsoftware.com/articles/Wrong.html
char buffer[ buffSz ];
Illégal en C++, puisque buffSz n'est pas une constante connue à la compilation. À moins que ça ait été rajouté dans la nouvelle norme ?
(En revanche, c'est légal en C. Du coup, je me demande si tu ne t'es pas trompé de forum.)
On Sat, 05 Dec 2009 01:06:54 +0100, TSalm <tsalm@free.fr>:
Attention, tu indiques ici que la fonction va modifier "zFilePath".
unsigned szRead;
Beurk. La notation hongroise est (normalement) abandonnée depuis
longtemps, surtout en C++.
En fait, il s'agissait au départ d'une bonne idée, mais comprise
totalement de travers.
Plus d'infos ici : http://www.joelonsoftware.com/articles/Wrong.html
char buffer[ buffSz ];
Illégal en C++, puisque buffSz n'est pas une constante connue à la
compilation. À moins que ça ait été rajouté dans la nouvelle norme ?
(En revanche, c'est légal en C. Du coup, je me demande si tu ne t'es
pas trompé de forum.)
Attention, tu indiques ici que la fonction va modifier "zFilePath".
unsigned szRead;
Beurk. La notation hongroise est (normalement) abandonnée depuis longtemps, surtout en C++. En fait, il s'agissait au départ d'une bonne idée, mais comprise totalement de travers. Plus d'infos ici : http://www.joelonsoftware.com/articles/Wrong.html
char buffer[ buffSz ];
Illégal en C++, puisque buffSz n'est pas une constante connue à la compilation. À moins que ça ait été rajouté dans la nouvelle norme ?
(En revanche, c'est légal en C. Du coup, je me demande si tu ne t'es pas trompé de forum.)
L'erreur dans ton code est probablement ici : tu t'es emmêlé les pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait, "true" converti en un entier), soit 0 (false converti en un entier).
On Sat, 05 Dec 2009 01:06:54 +0100, TSalm <tsalm@free.fr>:
L'erreur dans ton code est probablement ici : tu t'es emmêlé les
pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait,
"true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait, "true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait, "true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les
pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait,
"true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait, "true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait, "true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les
pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait,
"true" converti en un entier), soit 0 (false converti en un entier).
L'erreur dans ton code est probablement ici : tu t'es emmêlé les pinceaux dans les parenthèses. Du coup, szRead vaut soit 1 (en fait, "true" converti en un entier), soit 0 (false converti en un entier).
Attention, tu indiques ici que la fonction va modifier "zFilePath".
unsigned szRead;
Beurk. La notation hongroise est (normalement) abandonnée depuis longtemps, surtout en C++. En fait, il s'agissait au départ d'une bonne idée, mais comprise totalement de travers. Plus d'infos ici : http://www.joelonsoftware.com/articles/Wrong.html
char buffer[ buffSz ];
Illégal en C++, puisque buffSz n'est pas une constante connue à la compilation. À moins que ça ait été rajouté dans la nouvelle norme ?
(En revanche, c'est légal en C. Du coup, je me demande si tu ne t'es pas trompé de forum.)
Mais le C++ ne doit pas être 100% compatible avec le C ?
Le Sat, 05 Dec 2009 02:43:18 +0100, Fabien LE LEZ <gramster@gramster.com>
a écrit:
On Sat, 05 Dec 2009 01:06:54 +0100, TSalm <tsalm@free.fr>:
Attention, tu indiques ici que la fonction va modifier "zFilePath".
unsigned szRead;
Beurk. La notation hongroise est (normalement) abandonnée depuis
longtemps, surtout en C++.
En fait, il s'agissait au départ d'une bonne idée, mais comprise
totalement de travers.
Plus d'infos ici : http://www.joelonsoftware.com/articles/Wrong.html
char buffer[ buffSz ];
Illégal en C++, puisque buffSz n'est pas une constante connue à la
compilation. À moins que ça ait été rajouté dans la nouvelle norme ?
(En revanche, c'est légal en C. Du coup, je me demande si tu ne t'es
pas trompé de forum.)
Mais le C++ ne doit pas être 100% compatible avec le C ?
Attention, tu indiques ici que la fonction va modifier "zFilePath".
unsigned szRead;
Beurk. La notation hongroise est (normalement) abandonnée depuis longtemps, surtout en C++. En fait, il s'agissait au départ d'une bonne idée, mais comprise totalement de travers. Plus d'infos ici : http://www.joelonsoftware.com/articles/Wrong.html
char buffer[ buffSz ];
Illégal en C++, puisque buffSz n'est pas une constante connue à la compilation. À moins que ça ait été rajouté dans la nouvelle norme ?
(En revanche, c'est légal en C. Du coup, je me demande si tu ne t'es pas trompé de forum.)
Mais le C++ ne doit pas être 100% compatible avec le C ?
Fabien LE LEZ
On Sat, 05 Dec 2009 23:13:53 +0100, TSalm :
Mais le C++ ne doit pas être 100% compatible avec le C ?
Non, pas spécialement. Il y a une certaine compatibilité pour des raisons historiques, c'est tout.
On Sat, 05 Dec 2009 23:13:53 +0100, TSalm <tsalm@free.fr>:
Mais le C++ ne doit pas être 100% compatible avec le C ?
Non, pas spécialement. Il y a une certaine compatibilité pour des
raisons historiques, c'est tout.
while (true) { szRead = gzread( gzf, buffer, buffSz ); if ( szRead <= 0 ) break;
Oups. Faute d'inattention sur les parenthèses. Ca ferait mieux l'affaire : while ( ( szRead = gzread( gzf, buffer, buffSz ) ) > 0 )
J'ai trouvé d'où vient mon problème : la <<zlib>> ne gére pas le format zip :-( Et si la zlib ne reconnait pas un format, il le lit sans décompression. La taille que me retourne mon programme est la taille du fichier compressé.
Le Sun, 06 Dec 2009 16:24:19 +0100, TSalm <tsalm@free.fr> a écrit:
while (true)
{
szRead = gzread( gzf, buffer, buffSz );
if ( szRead <= 0 )
break;
Oups.
Faute d'inattention sur les parenthèses. Ca ferait mieux l'affaire :
while ( ( szRead = gzread( gzf, buffer, buffSz ) ) > 0 )
J'ai trouvé d'où vient mon problème : la <<zlib>> ne gére pas le format
zip :-(
Et si la zlib ne reconnait pas un format, il le lit sans décompression.
La taille que me retourne mon programme est la taille du fichier compressé.
while (true) { szRead = gzread( gzf, buffer, buffSz ); if ( szRead <= 0 ) break;
Oups. Faute d'inattention sur les parenthèses. Ca ferait mieux l'affaire : while ( ( szRead = gzread( gzf, buffer, buffSz ) ) > 0 )
J'ai trouvé d'où vient mon problème : la <<zlib>> ne gére pas le format zip :-( Et si la zlib ne reconnait pas un format, il le lit sans décompression. La taille que me retourne mon programme est la taille du fichier compressé.