hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 2007
-
23 mars 2004 à 15:23
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005
-
23 mai 2004 à 17:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 23 mai 2004 à 17:18
La réflexion étant limitée en c++, c'est très dur de faire un mécanisme de sérialisation général
cs_azkab
Messages postés22Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention29 juin 2004 10 mai 2004 à 21:59
bonjour tt le monde,
j ai a inserer des informations dans un fichier binaire 'TFileMap'. je sais exactement l'endoirt ou je dois l inserer mais je ne c pa comment faire et le pire c ke je bloque la dessus.
merci d avance
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 14 avril 2004 à 15:49
ouais pourquoi?
soumpro
Messages postés52Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention 7 mai 2004 14 avril 2004 à 15:09
lordbob , si tu veux , g un tuto pour la pop !
hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 20072 23 mars 2004 à 18:53
Vi, dans ce cas, forcément, ca ne va pas...
conclusion, faut faire sa sérialization soi meme
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 mars 2004 à 18:42
LordBob> On m'a dit que ca s'appelait comme ca, c'est le fait d'écrire un objet dans un fichier, et il se trouve que ces objets. J'ai mis polymorphe parce que les objets sont déclarés comme faisant partie d'un classe abstraite.
hilairenicolas> je suis toujours pas d'accord avec toi, ce serait trop simple. Si par exemple on a une donnéee de type char*, on souhaite plutot écrire la chaine plutot que son adresse, or c'est son adresse que ta méthode va écrire. Je pense qu'on est obligé de tout faire à chaque fois, et c'est vrai que ca n'est pas tres satisfaisant
hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 20072 23 mars 2004 à 18:28
euh ...
je viens de me rendre compte d'une erreur
faut pas faire un cast sur le this puis apres faire un delete !! NON PAS BIEN !!!
à remplacer par
strcpy(temp,(char*)this);
WriteFile(hFile, temp, sizeof(Fille1), &dwWritten, 0);
delete temp;
hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 20072 23 mars 2004 à 18:03
et oui, forcément ... mais dans ce cas là, je ferais un seul WriteFile :
ou un truc du genre
je l'ai pas testé avec ta classe, mais sur un petit test rapide, ca passe nickel
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 23 mars 2004 à 17:55
c'est quoi la "persistance d'objets polymorphes"?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 mars 2004 à 17:25
ah oui mais si tu as deux données dans ta classe, tu es obligé appeler plusieurs fois WriteFile
Par exemple si tu as 2 UINT, on fait comme ca:
WriteFile(hFile, &m_n1, 4, &dwWritten, 0);
WriteFile(hFile, &m_n2, 4, &dwWritten, 0);
hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 20072 23 mars 2004 à 17:05
et bien justement sizeof(Fille2) te donne 4 (la taille de UINT)
et si fille2 contenait 2 UINT, sizeof(Fille2) te renverrai 8
c'est justement l'interet ; de pas avoir à compter le nombre d'attributs, et surtout, s'il te prend l'envie d'en rajouter un par la suite, pas besoin de tout recalculer
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 mars 2004 à 16:36
4 n'est pas la taille de la classe mais la taille d'un UINT, donc j'aurais peut-etre pu mettre sizeof(UINT) si tu veux (comment ferais tu s'il y avait plusieurs données dans la classe?)
hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 20072 23 mars 2004 à 15:23
au lieu de faire un
WriteFile(hFile, &m_n, 4, &dwWritten, 0);
j'aurai fait un
WriteFile(hFile, &m_n, sizeof(Fille2), &dwWritten, 0);
ce qui t'évites de marquer la taille de la classe en dur
23 mai 2004 à 17:18
10 mai 2004 à 21:59
j ai a inserer des informations dans un fichier binaire 'TFileMap'. je sais exactement l'endoirt ou je dois l inserer mais je ne c pa comment faire et le pire c ke je bloque la dessus.
merci d avance
14 avril 2004 à 15:49
14 avril 2004 à 15:09
23 mars 2004 à 18:53
conclusion, faut faire sa sérialization soi meme
23 mars 2004 à 18:42
hilairenicolas> je suis toujours pas d'accord avec toi, ce serait trop simple. Si par exemple on a une donnéee de type char*, on souhaite plutot écrire la chaine plutot que son adresse, or c'est son adresse que ta méthode va écrire. Je pense qu'on est obligé de tout faire à chaque fois, et c'est vrai que ca n'est pas tres satisfaisant
23 mars 2004 à 18:28
je viens de me rendre compte d'une erreur
faut pas faire un cast sur le this puis apres faire un delete !! NON PAS BIEN !!!
à remplacer par
strcpy(temp,(char*)this);
WriteFile(hFile, temp, sizeof(Fille1), &dwWritten, 0);
delete temp;
23 mars 2004 à 18:03
BOOL Fille1::Write(HANDLE hFile) const
{
char * temp = new char[100];
temp = (char*)this;
WriteFile(hFile, temp, sizeof(Fille1), &dwWritten, 0);
delete temp;
return dwWritten == sizeof(Fille1);
}
et pour le read, je créerais un constructeur vide, puis :
Fille1* Fille1::Read(HANDLE hFile)
{
char * temp = new char[100];
ReadFile(hFile, temp, sizeof(Fille1), &dwWritten, 0);
Fille1 * tempF = new Fille1();
tempF = (Fille1*)temp;
delete temp;
if(dwWritten != sizeof(Fille1))
return NULL;
return tempF;
}
ou un truc du genre
je l'ai pas testé avec ta classe, mais sur un petit test rapide, ca passe nickel
23 mars 2004 à 17:55
23 mars 2004 à 17:25
Par exemple si tu as 2 UINT, on fait comme ca:
WriteFile(hFile, &m_n1, 4, &dwWritten, 0);
WriteFile(hFile, &m_n2, 4, &dwWritten, 0);
23 mars 2004 à 17:05
et si fille2 contenait 2 UINT, sizeof(Fille2) te renverrai 8
c'est justement l'interet ; de pas avoir à compter le nombre d'attributs, et surtout, s'il te prend l'envie d'en rajouter un par la suite, pas besoin de tout recalculer
23 mars 2004 à 16:36
23 mars 2004 à 15:23
WriteFile(hFile, &m_n, 4, &dwWritten, 0);
j'aurai fait un
WriteFile(hFile, &m_n, sizeof(Fille2), &dwWritten, 0);
ce qui t'évites de marquer la taille de la classe en dur