[C++] Ecriture de données dans un fichiers

Aurélien -  
soussitou Messages postés 5 Statut Membre -
Salut !
Voilà, je suis grand novice en programmation ; j'aimerai écrire dans un fichier, au formait binaire (on m'a dit que ca prenait moins de place) ddes données que j'ai en fait mises en forme avec un tableau de tableaux de int. La question est simple, comment de fais ?
Et quand je vais récupérer les données, ca va bien se passer ?
Une autre idée que j'ai eut, c de créer une structure, qui aura 7 paramètres (ca g 7 sous-tableaux) : quel est l'avantage ?
Merci pour vos réponses
Aurélien

20 réponses

  1. benita092000
     
    salut
    3
  2. anes
     
    Bonjours tout le monde j'ai une question si vous pourriez m'aider SVP
    je veux enregistrer le contenu d'un fichier (qui représente 200 valeur l'une en dessous de l'autre c-a-d 200 ligne ) dans un tableau donc chaque valeur dans une case de tableau... et merci d'avance.
    2
  3. Aurélien
     
    Soit en gros pour reprendre : comment écrire autre chose que du texte dans un fichier ? Merci ......
    0
  4. batmat Messages postés 1880 Date d'inscription   Statut Membre 114
     
    En fait, écrire au format "binaire" ou au format "texte" ne signifie rien.
    D'ailleurs sous Linux par exemple, l'ouverture "rt" n'a aucun effet : tout est ouvert en binaire.

    Mais tu ne gagnes pas vraiment de place directement e de façon magique : que tu écrives un octet en mode binaire ou un octet en mode texte, tu auras toujours écrit un octet :-)

    @++
    Poster, poster encore et toujours :-)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. batmat Messages postés 1880 Date d'inscription   Statut Membre 114
     
    http://f2gi.free.fr/files/cours/IOstream.html
    J'ai trouvé ça, ça résume ce qu'on peut faire.

    Pour clarifier ce que je disais : si ton programme écrit déjà dans un fichier et que tu veux juste passer en mode binaire sans rien changer d'autre, eh bien tu ne gagneras pas de place...

    @++
    Poster, poster encore et toujours :-)
    0
    1. Aurélien
       
      Ok merci batmat,
      si par contre mes données etaient des structures par ex, comment les stocker alors ? (le truc, c que je n'ai que des notions de c, et je sais que iostream.h ... ca convient plus pour du c++, c pas top.
      fread et fwrite sont des fonctions appropriées pour ca ?
      Merci
      Auré
      0
  7. Don_Corleone Messages postés 19 Statut Membre
     
    slt ,

    Tu n est pas obliger d erire tes fichiers en binaire car le gain de place n est pas vraiment important a ton nivo .
    Dans ce cas je te conseil les fonction f_open ,f_write et f_read . Elles sont tres simple d utilisation . Regarde dans l aide de ton outil de developement il devrai y etre explique comment on les utilise . Si t as un pb pour comprendre l aide dis moi le et je t expliquerai .

    Bonne chance

    "A prendre la vie trop au serieux , on en sort pas en vie ".
    0
  8. Aurélien
     
    Bon, je suis vraiment une quiche en c++ .... pointeurs et tout ca, faut que j'apprenne. J'ai 2 erreurs à la ligne fwrite ...

    struct Decimation
    
    {
    int FacteurDecimation;
    int Offset;
    };


    void main (void) {
    

    struct Decimation d1;
    d1.FacteurDecimation=1;
    d1.Offset=13;

    FILE* sortie = NULL; /* périphérique de sortie */
    sortie = fopen("ftext.txt", "wt");

    fwrite(*d1,sizeof(struct Decimation),1,sortie);
    }
    0
  9. batmat Messages postés 1880 Date d'inscription   Statut Membre 114
     
    n'écris pas *dl mais &dl
    @++
    Poster, poster encore et toujours :-)
    0
  10. batmat Messages postés 1880 Date d'inscription   Statut Membre 114
     
    et remplace :
    sortie = fopen("ftext.txt", "wt");


    par :
    if ( (sortie = fopen("ftext.txt", "wt")) == NULL)
    
    {
    cerr<<"Erreur d'ouverture du fichier"<<endl;
    return 1;
    }


    @++
    Poster, poster encore et toujours :-)
    0
  11. Aurélien
     
    ok merci ... suis vraiment nul ...
    i'll be back for other questions
    Auré
    0
    1. batmat Messages postés 1880 Date d'inscription   Statut Membre 114
       
      Arrete de dire que t null :-)
      Tout le monde a commencé un jour ;p L'important c de bosser et d'y croire. Un bon truc pour comprendre c de tenter d'aider les autres. (Mais fo qd meme attendre un ptit peu pour pas risquer d'induire trop en erreur :-D)



      @++
      Poster, poster encore et toujours :-)
      0
  12. batmat Messages postés 1880 Date d'inscription   Statut Membre 114
     
    Ah oui, aussi : fwrite te renvoie le nombre d'éléments écrits : tu dois donc vérifier que son retour est égal à 1 dans ton cas...

    @++
    Poster, poster encore et toujours :-)
    0
  13. Aurélien
     
    Ok merci pour ton aide & encouragements batmat ! c cool
    A+
    0
  14. abdelhak
     
    salut
    pour repondre
    ecrires en binaire ou en texte cvrai, cela , ne signifie rien du tout
    ce n'est pas en terme de poids masse texte et binaire qu'il fo penser, mais en terme de portabilité efficiente.
    les flux binaires gèrent directement les suites octales composées de bits. Donc, independemant des os et du matos
    les flux textes, eux, sont formatées, donc, portables et réutilisables
    par contre, les flux binaires sont beaucoup plus puissants que les flux texte.
    on parle alors de courant binaire dans les flux

    voilà
    accès binaire en ansi_c> fread et fwrite> renvoyant respectivement le nb d'enregistrements specifiés en 3 eme argument des fonctions citées lus et ecrits.
    accès texte>fonctions fgets, fputs, fgetc, fputc( caracteres/caracteres, ligne / ligne)
    j'en ai ommis un volontairement......

    cependant, l'astuce conciste a lire en binaire et a transferer pour des raisons de portabilités en texte...
    bonne chance
    abdel
    0
  15. blobette
     
    Bonjour!
    S'il vous plait,
    comment fait t'on en C++ pour ecrire dans un fichier a partir d'un certain point, en ecrasant seulement les donnees a partir de ce point, sans perdre ce qui precede dans le fichier?
    merci beaucoup!
    0
  16. pi€rre Messages postés 76 Statut Membre
     
    FILE * fic=fopen(chemin_fic,"a");
    ouvre en ecriture et positionne fic à la fin du fichier
    0
  17. HASSANI
     
    bonjour,

    Je voudrais bien un programme qui stocke un tableau des structures dans un fichier puis recupère ce tableau.

    Merci beaucoup
    0
    1. soussitou Messages postés 5 Statut Membre
       
      hassane svp jai besoin de votre aide svpppp faite vvvite je doit deposer ce jeudi mon memoire.jai déçidé a la derniere minute de programmer avec language C alors je metrise pas svppp jai vu votre annonce(sais tu faire un programme d'une matrice stocké ds un fichier puis réouvrir le fichier pour lire le contenu)
      chaque ligne doit etre parcouru tout les 4milli seconde
      si tu a qoi qe se soit envoi moi le svpppppp 0552127406
      0
  18. anes
     
    Bonjours tout le monde j'ai un petit soucis si vous pourriez m'aider SVP
    j'ai un programmes en c++ qui traite un objet de 200 ligne alors quand je transforme cet objet en string pour pouvoire l'enregistrer en format txt j'obtient sur mon texte que la dérnière ligne (numéro 200) ....sachant que j'utilise la commande ofstream pour écrire sur le fichier texte ....si qlq à une idée et merci d'avance.
    0
  19. anes
     
    merci beaucoup Tibo pour ta réponse je vais voir le lien......a+.
    0
  20. soussitou Messages postés 5 Statut Membre
     
    SVPPPPP DE LAAIIIIIIIDE avans le 24septembre(((ce jeudi dernier délai de dépo de memoire d'électronique )))
    je vais déposer ce mercredi mon memoire pour soutenir la semaine prochaine.je programme en VHDL mais seulement c'est trés difficil alors jai trouvé une solution.je peut programmer avec C seulement je métrise pas jai trouvé cette idée hier sur le net(le passage Cvers VHDL existe) svp qquelqun peut mecrir le code c pour stocker une matrice (N*M ) dans un fichier puis réouvrir le fichier pour lire le contenu seulement il faut parcourir chaque ligne a 4 mili seconde???? contacter moi a neonessed@hot.fr((0552127406))
    0