 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Vincent Richard Guest
|
Posted: Sun Jul 06, 2003 9:01 pm Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :
| Quote: | Maintenant, si je veux faire la même chose
avec un std::vector <unsigned char>, j'obtiens une erreur avec le code
suivant :
std::vector <unsigned char> data;
std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne 14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));
|
J'ai trouvé le problème : en fait, il faut utiliser un "istream_iterator"
de l'en-tête <iterator>...
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Jul 07, 2003 8:24 am Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in message news:<3f088e22$0$5423$626a54ce (AT) news (DOT) free.fr>...
| Quote: | Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :
Maintenant, si je veux faire la même chose avec un std::vector
unsigned char>, j'obtiens une erreur avec le code suivant :
std::vector <unsigned char> data;
std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne 14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));
J'ai trouvé le problème : en fait, il faut utiliser un
"istream_iterator" de l'en-tête <iterator>...
|
À la différence près que la sémantique n'est pas la même.
istream_iterator utilise des opérateurs <<, qui saute des espaces.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Mon Jul 07, 2003 9:14 am Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
Le Lundi 7 Juillet 2003 10:24, [email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :
| Quote: | Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in message news:<3f088e22$0$5423$626a54ce (AT) news (DOT) free.fr>...
Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :
Maintenant, si je veux faire la même chose avec un std::vector
unsigned char>, j'obtiens une erreur avec le code suivant :
std::vector <unsigned char> data;
std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne
14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));
J'ai trouvé le problème : en fait, il faut utiliser un
"istream_iterator" de l'en-tête <iterator>...
À la différence près que la sémantique n'est pas la même.
istream_iterator utilise des opérateurs <<, qui saute des espaces.
|
Quelle est la méthode correcte pour lire des données binaires sans problème
dans un std::vector
Merci pour ta réponse.
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Jul 07, 2003 3:55 pm Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in message news:<3f0939f8$0$5439$626a54ce (AT) news (DOT) free.fr>...
| Quote: | Le Lundi 7 Juillet 2003 10:24, [email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :
Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid
wrote
|
| Quote: | Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :
Maintenant, si je veux faire la même chose avec un std::vector
unsigned char>, j'obtiens une erreur avec le code suivant :
std::vector <unsigned char> data;
std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne
14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));
J'ai trouvé le problème : en fait, il faut utiliser un
"istream_iterator" de l'en-tête <iterator>...
À la différence près que la sémantique n'est pas la même.
istream_iterator utilise des opérateurs <<, qui saute des espaces.
Quelle est la méthode correcte pour lire des données binaires sans
problème dans un std::vector
|
Avec open, read et close. C-à-d avec des routines du système. Les
transferts du système d'exploitation vers le programme C++ se font par
char, toujours.
Dans la pratique,
std::vector< unsigned char > data ;
std::copy( std::istreambuf_iterator< char >( file ),
std::istreambuf_iterator< char >(),
std::back_inserter( data ) ) ;
doit marcher parfaitement. Au moins sur un système complément à deux.
Une bonne question, c'est comment lire un fichier binaire sur un système
complément à un avec des char signés. A priori, c'est impossible.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)130234516
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Mon Jul 07, 2003 7:56 pm Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
Le Lundi 7 Juillet 2003 17:55, [email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :
| Quote: | Quelle est la méthode correcte pour lire des données binaires sans
problème dans un std::vector <unsigned char> ?
Avec open, read et close. C-à-d avec des routines du système. Les
transferts du système d'exploitation vers le programme C++ se font par
char, toujours.
Dans la pratique,
std::vector< unsigned char > data ;
std::copy( std::istreambuf_iterator< char >( file ),
std::istreambuf_iterator< char >(),
std::back_inserter( data ) ) ;
doit marcher parfaitement. Au moins sur un système complément à deux.
|
Finalement, après quelques recherches sur des groupes anglophones, je suis
tombé sur le code suivant ; (assez) portable, mais non standard :
std::vector <unsigned char> data;
const std::vector <unsigned char>::size_type size =
file.seekg(0, std::ios::end).tellg();
if (file.good() && size < data.max_size())
{
data.resize(size);
file.seekg(0).read(&data[0], size);
}
Merci encore.
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Tue Jul 08, 2003 6:23 pm Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:ohvlgvgnd3haurfu4hud4oecriv541abeg (AT) 4ax (DOT) com...
| Quote: | On Tue, 08 Jul 2003 11:04:01 +0200, Vincent Richard
comp.lang.c++
C'est peut-être du snobisme de ma part, mais j'ai l'impression que
tous les gens un peu compétents en C++ vont plutôt sur
comp.lang.c++.moderated...
|
Encore qu'il en reste quelques uns plus que compétents sur le groupe non
modéré...
Chris
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Wed Jul 09, 2003 8:23 am Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
"Christophe Lephay" <christophe-lephay (AT) wanadoo (DOT) fr> wrote
| Quote: | "Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:ohvlgvgnd3haurfu4hud4oecriv541abeg (AT) 4ax (DOT) com...
On Tue, 08 Jul 2003 11:04:01 +0200, Vincent Richard
comp.lang.c++
C'est peut-être du snobisme de ma part, mais j'ai l'impression que
tous les gens un peu compétents en C++ vont plutôt sur
comp.lang.c++.moderated...
Encore qu'il en reste quelques uns plus que compétents sur le groupe
non modéré...
|
S'ils n'ont pas déscendu l'algorithme qui a été posté ici en flammes
tout de suite, j'ai mes doutes.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Wed Jul 09, 2003 11:40 am Post subject: Re: ifstream, vector et istreambuf_iterator |
|
|
<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message de
news:d6652001.0307090023.4c8bc7ad (AT) posting (DOT) google.com...
| Quote: | "Christophe Lephay" <christophe-lephay (AT) wanadoo (DOT) fr> wrote in message
Encore qu'il en reste quelques uns plus que compétents sur le groupe
non modéré...
S'ils n'ont pas déscendu l'algorithme qui a été posté ici en flammes
tout de suite, j'ai mes doutes.
|
Il l'a surement été, mais on ne lit pas toujours le fil au grand complet
quand on fait des recherches sur google...
Chris
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|