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 :

Fichier binaire en C++ et string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    22
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Par d�faut Fichier binaire en C++ et string
    Bonjour
    Y-a-t-il un moyen standard d'�crire et de lire une string dans un fichier binaire en C++ ?
    merci

  2. #2
    Membre �clair� Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par d�faut
    Si on part du principe ou tu utilise fstream, il y a la methode read ou bien l'operateur <<.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    22
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Par d�faut
    j'ai essay� d'�crire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     int a=50, b=80; string s="Un essai de chaine";
      ofstream f("toto.xyz",ios::out | ios::binary);
       f.write((char *)&a,sizeof(int));
       f<<s;
       f.write((char *)&b,sizeof(int));
       f.close();
    et de relire le tout par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     f=fopen("toto.xyz","rb");
       ifstream f("toto.xyz",ios::in| ios::binary);
       f.read((char *)&a,sizeof(int));
       f>>s;
       f.read((char *)&b,sizeof(int));
       f.close();
    et apparemment �a ne mmarche pas.
    J'ai essay� aussi
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     int a=50, b=80; string s="Un essai de chaine";
      ofstream f("toto.xyz",ios::out | ios::binary);
       f.write((char *)&a,sizeof(int));
       f.write(s.c_str(),s.size()+1);
       f.write((char *)&b,sizeof(int));
       f.close();
    avec le m�me code que pr�c�demment pour la relecture et �a marche pas.
    J'ai peut d'�tre oblig� d'�crire d'abord la valeur de s.size() et ensuite de lire un tableau de char mais �a me parait compliqu� !
    merci

  4. #4
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    22
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Par d�faut
    La seule m�thode qui semble marcher est la suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int a=50, b=80; string s="Un essai de chaine"; 
      ofstream f("toto.xyz",ios::out | ios::binary); 
       f.write((char *)&a,sizeof(int)); 
       int t;
       t=s.size()+1;
       f.write((char *)&t,sizeof(int));
       f.write(s.c_str(),t);  
       f.write((char *)&b,sizeof(int)); 
       f.close();
    et pour relire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       ifstream f("toto.xyz",ios::in| ios::binary); 
       f.read((char *)&a,sizeof(int)); 
        int t;
       f.read((char *)&t,sizeof(int));
       char *buf=new char[t];
       f.read(buf,t);
       s=string(buf);
       delete []buf;
       f.read((char *)&b,sizeof(int)); 
       f.close();
    �a me parait compliqu� !

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Les flux ne peuvent pas d�terminer, lors de la lecture, o� s'arr�te la cha�ne de caract�res.

  6. #6
    Membre �clair� Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par d�faut
    Citation Envoy� par loufoque
    Les flux ne peuvent pas d�terminer, lors de la lecture, o� s'arr�te la cha�ne de caract�res.
    Je crois que les espaces et les retours charriots sont concid�r�s comme des fin de chaines non ?

  7. #7
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pas dans les �critures brutes qui (de)s�rialisent des nombres connus d'octets.
    Quel est le probl�me avec les fichiers texte formatt�s ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  8. #8
    Membre �prouv�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Par d�faut
    Salut !!

    J'ai choisi cette solution pour �crire des petits (max 5/6 Ko) fichiers images venant de MySQL (je c pas ce que �a vaut mais �a marche)


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // Fichier temporaire image
            ofstream file("data.m2d",ios::binary|ios::out|ios::trunc);
            if (!file) throw MemException("Impossible d'écrire dans ce fichier temporaire");
     
            string dataimg = lurl[i];  <--- Ici lurl = c'est un vector<string>
            string :: const_iterator sit = dataimg.begin();
                       while (sit!= dataimg.end()) {
                                 char c = *sit;
                                 file.write(&c,sizeof(char));
                                 ++sit;
                                 };
     
             file.close();
     
     
    // Et après je l'ouvre avec la SDL
    Voil� ... C'est assez flou aussi pour moi ces histoire de flux texte et binaire (alors que je vois pas de diff�rences mais bon)

  9. #9
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Salut tous , j'ai un probl�me qui a un rapport avec ton sujet mais cette fois je veux utiliser un read(buffer,length) et buffer est un std::string et length est la longeur en int , mais je rencontre une erreur , je crois que je dois lui passer un char* alors que je lui passe un std::string , sait quelqu'un de vous comment utiliser un std::string avec le membre read ?
    ( Note : ne me dites pas d'abandonner et d'utiliser les anciens fonctions C , je veux moi utiliser du C++ ! )

    Merci d'avance .

    @+ Bouazza

  10. #10
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pour des buffers, pr�f�res plut�t std::vector.
    Quant aux deux types de fichiers, c'est en rapport avec les interp�tations de certaines s�quences comme les sauts de lignes. C'est pas dans une des FAQ ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. string - fichier binaire ?
    Par rimas2009 dans le forum C++
    R�ponses: 1
    Dernier message: 19/05/2009, 11h15
  2. Fichier binaire to Hexa String
    Par arthix dans le forum Entr�e/Sortie
    R�ponses: 2
    Dernier message: 27/03/2008, 20h17
  3. R�ponses: 7
    Dernier message: 01/09/2006, 14h19
  4. Nettoyer String □ (recup d'1 fichier binaire)
    Par gabule dans le forum Langage
    R�ponses: 4
    Dernier message: 31/05/2006, 15h09
  5. R�ponses: 2
    Dernier message: 06/12/2005, 12h01

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