begin process at 2012 05 29 02:05:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

[C++] Lecture et écriture binaire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C++] Lecture et écriture binaire

dimanche 11 avril 2010 à 15:00:51 | [C++] Lecture et écriture binaire

pop70

Bonjour, voici mon problème :

J'ai des objet que j'aimerais sauvegarder (j'ai simplifié mon code en utilisant un seul objet string) via une écriture binaire.

Je me suis rendu compte que si je pratique l'enregistrement et la lecture dans un même bloc, la lecture me renvoi bien l'objet enregistré :

Code C/C++ :
int main()   
 {

//Enregistrement

ofstream fichier ("Fichier_binaire", ios::binary); //Je sais que ios::binary n'est pas utile pour du texte, mais c'est pour l'exemple...

string texte = "Texte_a_sauvegarder";

fichier.write((char*)&texte, sizeof texte);
ffichier.close();



//Lecture

ifstream fichier2 ("Fichier_binaire", ios::binary);

string texte2 = "rien";

fichier2.read ((char*)&texte2, sizeof fichier2);
fichier2.close();

cout << texte2; //ME RENVOIE BIEN "Texte_a_sauvegarder"



cout << "\n\n\n";
system("PAUSE");
     return 0;
  }


Mais dès que je sépare en deux bloc, par exemple pour demander Enregistrement ou Lecture, la lecture fonctionne pas :

Code C/C++ :
 int main()
 {
cout << "1-Enregistre __ 2-Ouvre : ";
int choix;
cin >> choix;

if (choix==1)
{
//Enregistrement

ofstream fichier ("Fichier_binaire", ios::binary);

string texte = "Texte_a_sauvegarder";

fichier.write((char*)&texte, sizeof texte);
ffichier.close();

}
if (choix==2)
{
//Lecture 

ifstream fichier2 ("Fichier_binaire", ios::binary);

string texte2 = "rien";

fichier2.read ((char*)&texte2, sizeof fichier2);
fichier2.close();

cout << texte2; //ME RENVOIE "rien"
}

cout << "\n\n\n";
system("PAUSE");
     return 0;


Et pour des objets de classes que j'ai moi même créé, c'est pareil, ils ne changent pas après la lecture.

Merci de votre aide !


Pop70
lundi 12 avril 2010 à 10:21:02 | Re : [C++] Lecture et écriture binaire

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Je suis même étonné que ça ai marché la première fois !
Tu utilises certaines notions de manières très bancales.

Pour convertir un std::string en char*, on ne prend pas son adresse ! On le convertit grâce à la méthode c_str().
Ensuite, la méthode write prend le nombre de caractères à écrire. Ça sera donc "taille du texte" + 1 (pour le zéro terminal), et non la taille de l'objet "std::string".
De plus, évite absolument les "using namespace", voir: [ Lien ]
Une variable n'existe que dans une "portée" (toute la zone entre accolades représente une portée). Donc si tu déclares une variable à l'intérieur d'un if, celle-ci n'existe pas en dehors de celui-ci. Il n'est donc pas nécessaire de changer le nom des variables, puisqu'elles ne se "voient" pas.

Enfin, sache que si tu veux sauvegarder un objet en binaire, le mieux est de le sérialiser via Boost:serialize (cherche la bibliothèque Boost sur internet).

Ça donne ceci:
Code C/C++ :
#include <iostream>
#include <fstream>

int main()
{
  std::cout << "1-Enregistre __ 2-Ouvre : ";
  int choix;
  std::cin >> choix;

  if (choix == 1)
  {
    std::ofstream fichier("Fichier_binaire", std::ios::binary);
    std::string texte = "Texte_a_sauvegarder";

    fichier.write(texte.c_str(), texte.size() + 1);
    fichier.close();
  }
  else if (choix == 2)
  {
    std::ifstream fichier("Fichier_binaire", std::ios::binary);
    char buff[256] = {0};

    fichier.read(buff, 255);
    fichier.close();
    std::string texte(buff);

    std::cout << texte << std::endl;
  }

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
lundi 12 avril 2010 à 10:34:19 | Re : [C++] Lecture et écriture binaire

pop70

Merci bien , en effet je ne m'était pas rendu compte de l'adresse du string que je prenais.
Sinon pour les using namespace , je sais que ce n'est pas à faire, et d'ailleurs dans un bouquin ils disent de le remplacer par using std::cout, using std::endl... C'est mieux ?


Pop70


Cette discussion est classée dans : fichier, lecture, binaire, texte, fichier2


Répondre à ce message

Sujets en rapport avec ce message

Lecture d'un fichier texte pour mettre dans une liste chainée [ par webgladiator ] Merci de prendre du temps à me lire.J'ai un projet d'info dont le but est d'effectuer le plus court itinéraire dans le metro parisien (opimisation).J' lecture d'un fichier texte [ par mig73 ] je travaille sous Visual c++ .netApplication SDImon projet est le suivant:je dois ouvrir un fichier avec: Menu/Fichier/Ouvrir...C'est un fichier texte Lecture de fichier binaire structuré [ par nico20000 ] Bonjour,j'ai besoin de lire dans un fichier binaire dont l'entête ressemble à ceci: (traduite en hexa)Properties gc90063 num FTPLocal le 17/11/2003Je Lecture d'un fichier texte en C [ par toto000 ] Bonjour, j'ai un fichier texte avec un mot par ligne et je voudrai mettre ces mots dans un tableau de telle sorte que le premier mot soit dans la prem Lecture Fichier texte --> Variable [ par Guidelor ] BonjourJ'ai un fichier texte dans lequel il y a 2 lignes:12345678J'aimerais que mon prog lise le 1er chiffre et le mette dans la variable int Chiffre1 Ecriture en texte plutot qu'en binaire [ par Trinity_vv ] Salut à tout,J'ai un problème de transtypage, je copie un fichier ini afin de le recopier dans un autre, malheureusement je ne parvient qu'à transcrir Lecture fichier binaire [ par benus ] Bonjour;Je travaille sur les fichiers en ce moment et j'aurai aimé savoir aprés la lecture d'un fichier avec :FILE* file = fopen("toto.bin", "rb");fre LECTURE ET RECUPERATION DES DONNEES DANS UN FICHIER TEXTE EN LANGAGE C [ par FOSTA ] Bonjour,je souhaite recupérer des données dans un fichier texte. Nous considéronsqu'un enregistrement du fichier contient onze(11) champs séparés les Lecture ligne par ligne d'un fichier texte [ par Aldarek ] Bonjour à tous, je sais comment on fait pour lire un fichier ligne par ligne mais je cherche à lire une ligne particulière pour ensuite récupérer sa v lecture de fichier texte [ par isirnet ] CFileDialog  me permet d'ouvrire le dialogue "Ouvrire" pour selectionner un fichier, mais mais comment faire pour recuperer le contenu d'un fichier  s


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales