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++Builder Discussion :

Ecrire dans fichier TFileStream


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut Ecrire dans fichier TFileStream
    Bonjour à tous!
    J'essaye de créer un menu "Fichier", où il y'aura bien évidemment Ouvrir et Enregistrer. En ce moment je bloque sur "Enregistrer".
    Je fais juste un essai, je crée des enregistrements et je les ecrits dans un fichier dont le nom sera communiqué par un TSaveDialog. Voici ce que j'ai écrit dans l'evénement OnClick du menu:
    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
    18
    19
    20
    21
    22
     
    //------------------------------------------------------------------------
    void __fastcall TForm1::Enregistrer1Click(TObject *Sender)
    {
    struct enreg {
    AnsiString nom;
    int age;
    };
    if ( SaveDialog1->Execute())
    {
    TFileStream *fichier=new TFileStream(SaveDialog1->FileName,fmCreate);
    struct enreg *buff=new struct enreg;
    for (int i=0;i<4;i++)
    {
    buff->nom="someone";
    buff->age=21;
    fichier->Write(buff,sizeof(struct enreg));
    }
     
    delete (fichier);
    }
    //------------------------------------------------------------------------
    Pense aux balises de code le " # " ton texte sera plus lisible

    Où est le problème??
    Si quelqu'un pourrait m'aider ça serait très gentil de sa part.
    Je travaille avec c++Builder.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut
    Bonjour

    Eh bien justement c'est quoi ton problème ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Ah désolée, j'ai une erreur de compilation:
    [Lieur Erreur fatale]:illegal option
    Où est l'erreur dans mon code, je ne coprends pas.
    Sinon dites-moi comment vous faites pour ecrire dans un fichier binaire.
    Merci à vous!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut
    Bonjour

    Erreur du lieur (linker) donc pas d'erreur de compilation. Donc ton code est à priori correct. Modifie les options du lieur, il doit y avoir qq chose qui ne lui plait pas.

    Ton code est correct d'un point de vue langage, mais il ne donnera pas ce que tu veux me semble-t-il. En effet ton sizeof(enreg) va toujours te donner la même chose, car la classe AnsiString ne contient pas la chaine que tu lui affecte mais une référence (4 octets) vers cette chaine. La longueur d'une Ansistring s'obtient par AnsiString->Length().

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Meci de m'avoir épondu mais j'avoue ne pas avoir compris .Je continues toujous à chercher,si j'ai du nouveau je vous dirais!

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Le code que tu a poste fonctionne chez moi (je n'ai pas verifie ce qu'il ecrit), je n'ai rien ajoute dans les entetes, si tu a autre chose comme code il te faut voir de ce cote
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut
    Bonjour

    Dans Projet/Options, onglet Lieur et Lieur évolué il faut que tu modifies les options puisque tu en as une qui est illégale. (Tu as un bouton d'aide dans ces onglets).

    Pour la question du sizeof (enreg), essaie ce code et tu vas voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       struct enreg
        {
    		AnsiString nom;
    		int age;
    	};
     
    	enreg tt, vv;
    	tt.nom = "comment allez-vous ?";
    	tt.age = 22;
    	vv.nom = "rien";
    	vv.age = 22;
     
    	if (sizeof (tt) == sizeof(vv)) ShowMessage ("Les 2 structures ont la même taille");

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    J'ai ouvert un nouveau projet, copié le code (celui de l'écriture dans le fichier) et ça a marché mais je ne sais toujours pas pourquoi ça ne marchait pas la première fois .
    Quand au message d'Orangina, j'ai executé ton code et effectivement les deux structures ont la même taille, pourquoi?
    C'est pas parce que le type AnsiString réserve un espace fixe au préalable et donc peut importe ce que l'on écrit dedans la taille reste la même?
    Merci pour vos réponses

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Ah désolé, je viens de relire ton post et effectivement tu m'as déja expliqué . Mais juste une question, quand tu dis réference tu veux dire pointeur c'est ça?
    (parce que je confonds parfois entre les réferences et pointeurs )

Discussions similaires

  1. Ecrire dans fichier
    Par Sahara dans le forum C++
    Réponses: 2
    Dernier message: 16/11/2006, 20h01
  2. Ecrire dans fichier
    Par tit_oune dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 10/04/2006, 14h10
  3. [C#] Comment lire/ecrire dans fichier ini ?
    Par meli0207 dans le forum C#
    Réponses: 2
    Dernier message: 20/03/2006, 16h53
  4. ecrire dans fichier côté serveur
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 07/03/2006, 16h47
  5. [Débutant][JFileChooser] Ecrire dans fichier
    Par Clark dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 16/05/2005, 17h47

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