PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.c++ > Manipuler une sous zone d'un ifstream avec un autre ifstream
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Manipuler une sous zone d'un ifstream avec un autre ifstream

Réponse
 
LinkBack Outils de la discussion
Vieux 24/02/2008, 09h32   #1
philippe.lrx@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Manipuler une sous zone d'un ifstream avec un autre ifstream

Bonjour,

J'ai ouvert un fichier avec std::ifstream, je localise un zone bien
précise dans le fichier avec std::ios::pos_type et une taille en
octets.

J'aimerais ouvrir un autre std::ifstream ou std::istream sur cette
zone bien définie pour là manipuler comme si c'était un fichier
normal, l'objet qui utilisera le std::istream doit croire manipuler un
fichier normal, je ne veux surtout pas charger la zone en mémoire qui
peux être éventuellement très grosse.

Ce genre de chose est-il possible et si oui comment ?

Merci.
  Réponse avec citation
Vieux 24/02/2008, 12h55   #2
James Kanze
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Manipuler une sous zone d'un ifstream avec un autre ifstream

On Feb 24, 10:32 am, philippe....@gmail.com wrote:
> J'ai ouvert un fichier avec std::ifstream, je localise un zone
> bien précise dans le fichier avec std::ios::pos_type et une
> taille en octets.


> J'aimerais ouvrir un autre std::ifstream ou std::istream sur
> cette zone bien définie pour là manipuler comme si c'était un
> fichier normal, l'objet qui utilisera le std::istream doit
> croire manipuler un fichier normal, je ne veux surtout pas
> charger la zone en mémoire qui peux être éventuellement très
> grosse.


> Ce genre de chose est-il possible et si oui comment ?


Deux solutions, selon la taille. La plus simple, sans doute, si
la taille n'est pas trop grosse, c'est de lire toute la section
d'un coup dans un std::string, puis utiliser std::istringstream.
Pour ce faire, on peut se servir de la contiguïté de la mémoire
dans std::string. Ce n'est pas actuellement garantie, mais elle
le sera dans la prochaine version de la norme, et dans les
faits, toutes les implémentations actuelles utilisent de la
mémoire contigue. Donc :

std::string buffer( taille, '\0' ) ;
file.read( &buffer[ 0 ], taille ) ;
std::string subfile( buffer ) ;

Sinon, un streambuf filtrant pourrait faire l'affaire. Voir mes
articles à http://kanze.james.neuf.fr/articles-fr.html, surtout
le seconde, qui traite prèsqu'exactement ton cas.

Et en passant, tu es bien au courant que si le flux n'est pas en
mode binaire, les seuls streampos valides sont les valeurs
renvoyées par tellg.

--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
  Réponse avec citation
Vieux 25/02/2008, 19h36   #3
philippe.lrx@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Manipuler une sous zone d'un ifstream avec un autre ifstream

On 24 fév, 13:55, James Kanze <james.ka...@gmail.com> wrote:
> Deux solutions, selon la taille. La plus simple, sans doute, si
> la taille n'est pas trop grosse, c'est de lire toute la section
> d'un coup dans un std::string, puis utiliser std::istringstream.
> Pour ce faire, on peut se servir de la contiguïté de la mémoire
> dans std::string. Ce n'est pas actuellement garantie, mais elle
> le sera dans la prochaine version de la norme, et dans les
> faits, toutes les implémentations actuelles utilisent de la
> mémoire contigue. Donc :
>
> std::string buffer( taille, '\0' ) ;
> file.read( &buffer[ 0 ], taille ) ;
> std::string subfile( buffer ) ;
>


Aujourd'hui la taille devient mon problème.

> Sinon, un streambuf filtrant pourrait faire l'affaire. Voir mes
> articles àhttp://kanze.james.neuf.fr/articles-fr.html, surtout
> le seconde, qui traite prèsqu'exactement ton cas.


J'ai passé pas mal de temps sur ton article et ton code, il va falloir
que je potasse le streambuf pour l'instant j'ai du mal à tout
comprendre, mais ça va venir.

>
> Et en passant, tu es bien au courant que si le flux n'est pas en
> mode binaire, les seuls streampos valides sont les valeurs
> renvoyées par tellg.
>

J'utilise tellg, j'imagine que tu fais référence à l'autre qui est
tellp.
Dans ma doc (du web) j'ai en résumé : "utiliser tellg pour les flux en
entrée et tellp pour les flux en sortie".
Il n'est pas fait mention de flux binaire ou texte, la définition est
elle fausse ?

Merci.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 13h30.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,08804 seconds with 11 queries