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

cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 - 7 mars 2006 à 12:11
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 - 10 mars 2006 à 10:38
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 mars 2006 à 14:24
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++
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
7 mars 2006 à 14:33
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 ...
0
zoolonlys Messages postés 2 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 7 mars 2006
7 mars 2006 à 19:46
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 mars 2006 à 20:23
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
8 mars 2006 à 09:32
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
?...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 mars 2006 à 09:38
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++
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
8 mars 2006 à 09:50
le probleme c'est que je dois faire un projet windows form ...

c'est quoi tout ces liens ?
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
8 mars 2006 à 11:53
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 ) ??
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
9 mars 2006 à 12:27
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
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
9 mars 2006 à 12:41
ou comment convertir un unsigned char en unsigned char __gc[] ???
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
9 mars 2006 à 12:45
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
0
cs_brute Messages postés 135 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 11 mai 2007 1
10 mars 2006 à 10:38
personne ne connait la solution ...
please help
0
Rejoignez-nous