IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème de lecture fichier dans un vector<bool>


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème de lecture fichier dans un vector<bool>
    Bonjour à tous,

    Je rencontre le problème suivant :

    J'écrit une série de bool dans un fichier avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(&dataLink.tabBool[0], sizeof(bool), dataLink.tabBool.size(), pFile);
    Et je le lis avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fread(&__dataLine.tabBool[0], sizeof(bool), __dataLine.tabBool.size(), pFile);
    Mes valeurs lues sont bien les valeurs écrites.
    Mais mon problème est ailleurs, en effet, le fread est dans une boucle for. Dans ma boucle for j'initialise un compteur qui doit aller de 0 à x... mais lorsque je passe l'instruction fread de mon vecteur bool, mon compteur affiche une valeur très élevée.
    Si j'écris un code similaire avec un vecteur d'unsigned int, le problème disparait.

    Auriez-vous une idée de mon problème ?

  2. #2
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Tu peux illustrer avec du code s'il te plait?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Attention, std::vector<bool> est un cas particulier.
    Il est spécialisé pour que chaque élément occupe 1 bit au lieu de 1 octet, donc un vector<bool> de N éléments ne mesure pas N*sizeof(bool) octets mais (N+1)*sizeof(bool)/8 octets. Du coup les paramètres des fread/fwrite sont peut-être faux.
    D'ailleurs il vaudrait mieux utiliser un std::ofstream/std::ifstream pour ouvrir et lire/remplir ton fichier, au lieu des fread/fwrite/FILE* qui sont obsolètes et peuvent conduire à des maladresses.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Sans compter que le vector<bool> est déconseillé, parce que sa sémantique est différente de celle d'un vecteur normal.

    Il est préférable d'utiliser un std::bistet<> (http://www.cplusplus.com/reference/stl/bitset/) pour représenter une ensemble de booléen.

    Un bitset peut être construit à partir d'un std::string, et crée sur demande un std::string, ce qui peut être fort pratique pour stocker le contenu dans un fichier.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci à tous pour vos réponses.
    J'avais effectivement lu quelques part que les vector<bool> étaient un cas particulier.

    Ce que je comprend c'est que je devrais :
    1) utiliser les ifstream plutôt que les fread
    2) utiliser un std::bitset plustôt qu'un std::vector pour le cas particulier d'un tableau de bool.

    Dès lundi je mettrai cela en place et vous tiendrai au courant.

    Encore un grand merci pour votre aide précieuse.

Discussions similaires

  1. Problème lecture fichier dans une arborescence de dossiers
    Par africanwinners dans le forum Langage
    Réponses: 5
    Dernier message: 05/12/2014, 12h59
  2. Problème de lecture/ecriture dans un fichier txt
    Par fraid49 dans le forum Général Python
    Réponses: 6
    Dernier message: 20/11/2008, 11h32
  3. [C#-XML] - Problème de lecture fichier XML
    Par Gloups dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/08/2006, 00h40
  4. problème de lecture fichier
    Par Polo40 dans le forum C
    Réponses: 8
    Dernier message: 30/03/2006, 10h58
  5. [TPAbbrevia] Problème ajout de fichiers dans archive
    Par Pill_S dans le forum Composants VCL
    Réponses: 4
    Dernier message: 13/10/2005, 23h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo