Copier le contenu d'une structure dans un fichier en C++

Signaler
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
-
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
-
Bonjour,



J'ai un problème pour copier le contenu d'une structure dans un fichier
en c++. J'ai bien regardé les messages postés dans le forum sur ce
sujet mais aucun ne me permet de résoudre mon probleme.



J'ai une structure :

struct TyDebutCnf

{

char
DebVersion[8];

long int DebLongueur;

char
DebTitre[80];

};

j'utilise un filestream et un binarywriter pour l'ecriture ( dememe pour la lecture)

FileStream* FichierDest = new FileStream(this->NomFichierSortie->Text, FileMode::OpenOrCreate);

BinaryWriter* BWriter = new BinaryWriter(FichierDest);

précision : this->NomFichierSortie->Text correspond au nom de fichier entré par l'utilisateur dans la windows form.



j'aimerai copier l'intégralité de la structure dans mon fichier.

Pour l'instant j'ai essayé plusieur solution mais aucune ne marche ...

please help me...

12 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
TASTRUCT s;
DWORD d;
HANDLE hfl;

d = 0; WriteFile(hfl, &s, sizeof(TASTRUCT), &d, 0):
if(d != sizeof(TASTRUCT)) ERREUR;

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
euhhh .... c bien du C++ ???

je comprend pas a quoi correspond dword et le handle ici ...

Peut tu me commenter tes lignes please car là .... jcomprend rien ...
Messages postés
2
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2006

Sinon y a aussi fstream.h

Et, si ma memoire est bonne ca s'utilise comme ca :

fstream f;
f.open(nomFichier,ios::out); // pour les params je sais pas si c ça
f << maStruct.myAtribu ;
f.close();

Si tu y arrive tjs pas je te filerais un petit code qui doit trainer sur mon dd.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Ce que j'ai mis plus haut est du code API Windows sans aucune bibli d'interprétation au milieu.
Utilisable en ASM, C, C++, VB, Delphi, etc...

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Lorsque j'essaie :

DWORD d;

HANDLE hfl;

WriteFile(hfl, &pTyDebutCnf, l, &d, 0):

if(d != l) ERREUR;



J'ai 113 erreurs, dont DWORD identificateur non déclaré ..... Comment
puis je corriger ces erreurs , peut etre doit je inclure quelque chose
?...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Faut faire un projet Windows App.
Faudrait initialiser le handle de fichier (hfl) avec CreateFile().
if(d != l) ERREUR; ici est pseudo code, 'ERREUR' est à remplacer par un vrai code faisant ce que tu voudras.

http://brunews.free.fr/brunews/download/CP5.zip
http://brunews.free.fr/brunews/download/CP5Sources.zip


http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
le probleme c'est que je dois faire un projet windows form ...

c'est quoi tout ces liens ?
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
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 ) ??
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
J'ai trouvé la fonction write qui correspond a celle que je veux ( possibilité de spécifier le nombre d'octet a écrire).

J'ai une erreur sur cette ligne :

BWriter->Write((Byte)pTyDebutCnf.DebVersion, 0, 12);

//error C2664: 'void System::IO::BinaryWriter::Write(unsigned char __gc[],int,int)' : impossible de convertir le paramètre 1 de 'unsigned char' en 'unsigned char __gc[]'

Est-ce que quelqu'un sait comment Ecrire une structure dans un fichier ?????

Please help
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
ou comment convertir un unsigned char en unsigned char __gc[] ???
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
en essayant
BWriter->Write((Byte *)&pTyDebutCnf, 0, 12);

j'ai une erreur de conversion entre un unsigned char * en un unsigned char __gc[]

Please Help
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
personne ne connait la solution ...
please help