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

MFC Discussion :

copier une structure dans un fichier


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut copier une structure dans un fichier
    bonjour,

    J'aimerai copier l'intégralité d'une structure dans un fichier. Je connais la syntaxe en C mais je dois le faire en c++ et je Galere ...

    En C : _os_write(pt_Config->cfa_path_fichier,&et_dataa,&count)
    ca marche tres bien.

    En c++ : BWriter->Write(&pTyDebutCnf,0, 12);
    J'ai essayé ca mais j'ai une erreur 2624....
    j'ai également essayé d'autres solutions mais sans réussite.

    Si quelqu'un sait comment faire ou a une idée..... car là .......

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est du C++.Net ?

    quelle est l'erreur 2624 ? sur quelle ligne ? qu'y a-t-il dans ta structure ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    oui c du C++.net

    ma structure est la suivante :
    struct TyDebutCnf
    {
    char DebVersion[8];
    long int DebLongueur;
    char DebTitre[80];
    };

    j'ai une erreur C2664 impossible de convertir le parametre 1 de TyDebutCnf * en unsigned char __gc[] sur la ligne : BWriter->Write(&pTyDebutCnf,0, 12);

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Et avec un cast devant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BWriter->Write((unsigned char *) &pTyDebutCnf,0, 12);
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    pas sûr: La fonction semble demander du managé et la structure semble ne pas l'être (d'après le message d'erreur)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    avec un cast :

    BWriter->Write((unsigned char *)&pTyDebutCnf,0, 12);

    j'ai la meme erreur C2664 ,

    lorsque j'essai avec le meme cast mais sur une autre définition de Write (avec un seul argument)

    BWriter->Write((unsigned char *)&pTyDebutCnf);

    je n'obtiens pas d'erreur mais c'est le résultat dans le fichier qui me donne qu'un seul caractere.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    lorsque je débug, je regarde ma fonction write, et il y a marquer <overloaded>, peut etre un probleme de Buffer overflow ????

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    non, il te faut utiliser un pointeur épingle, __pin

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    un pointeur d'épingle ???

    je connais pas du tout, tu peu me dire a quoi cela consiste please ?

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    j'ai essayé et j'ai une erreur C2440

    est - ce valable sur des types struct ????

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    normalement oui
    sinon, écrit les données les unes après les autres, plutot que tout en une fois

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Je viens de trouver comment copier la valeur d'un champ d'une structure :

    BWriter->Write(Convert::ToString(pTyDebutCnf.DebVersion));

    Si j'utilise la ligne ci dessus, je ne copie que la valeur du champs et non l'intégralité du champ( avec les octets a 0).

    En fait, je dois copier les 12 premiers octets de la structure TyDebutCnf dont DebVersion fait partit (8octets) et dont DebLongueur fait également partit (4 octets).

    Avez vous une idée sur comment copier l'intégralité d'un champ ( avec les octets a 0 ) ??

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    quelqu'un connait la solution please ??

  15. #15
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    est-ce que tu as essayé un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		 unsigned char tabByte __gc[] = new unsigned char __gc[sizeof(TyDebutCnf)];
    		 System::Runtime::InteropServices::Marshal::Copy(tabByte, 0, &pTyDebutCnf, sizeof(TyDebutCnf));
    		 BWriter->Write(tabByte,0, sizeof(TyDebutCnf));

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    merci pour ta réponse,

    aucune erreur lors de la compilation mais les octets copiés dans le fichier sont tous a 0 !! ????

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    tabByte
    ne contient pas les données des champs de la structure TyDebutCnf,
    la ligne suivante n'effectue pas la copie correctement.
    System::Runtime::InteropServices::Marshal::Copy(tabByte, 0, &pTyDebutCnf, sizeof(TyDebutCnf));

    Savez vous d'ou viens l'erreur ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    peut etre est-ce a cause de ma structure qui ne contient pas que des unsigned char mais aussi un long Int ?

  19. #19
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    excuse moi, vu que je n'ai pas testé, je n'avais pas vu que j'avais fait une erreur dans la lecture des paramètres de fonctions, et que j'avais inversé la source et la destination ...

    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System::Runtime::InteropServices::Marshal::Copy(tabByte, 0, &pTyDebutCnf, sizeof(TyDebutCnf));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System::Runtime::InteropServices::Marshal::Copy(&pTyDebutCnf, tabByte, 0, sizeof(TyDebutCnf));

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/12/2007, 02h03
  2. Réponses: 17
    Dernier message: 09/03/2007, 18h13
  3. [VBA-E] Copier une macro dans un fichier à l'aide d'une macro
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/01/2007, 20h05
  4. stocker une structure dans un fichier ini?
    Par Mickey.jet dans le forum C
    Réponses: 6
    Dernier message: 13/09/2006, 16h57
  5. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09

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