Bonjour, je rencontre actuellement un pb qui me dépasse (visiblement il n'en
faut pas beaucoup.), je voudrais créer un fichier pour y enregistrer le
contenu d'une variable de type structure du genre :
Struct Pref
{
Cstring strNom ;
Cstring strPrenom ;
} ;
en mode binaire. Pour cela j'utilise un objet Cfile, et le code suivant :
et j'obtiens le message : PREFERENCES UTILISATEUR a causé une défaillance de
page dans le module MSVCRTD.DLL à 016f:10219ead.
Auriez vous la réponse à ce pb ?
Complément d'infos
J'oubliais, lors de l'exécution du code, un fichier est bien créé, il
contient quelque chose, par contre c'est au moment de la lecture que se
produit le plantage, mais cela peut aussi être du à des données improprement
écrites dans le fichier.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jmr
Effectivement, le pb semble provenir des objets CString et en modifiant le code de façon à utiliser la classe Carchive, l'enregistrement et la lecture se passent correctement et ne génèrent aucune erreur. Cependant, les données sont écrites en mode texte et de façon « séquentielle ». Or j'aurais souhaité écrire directement une variable de type structure comme il est possible de le faire en Pascal.
// Initialisation des champs de la variable. Buf.strNom = « Dupont » ; Buf.strPrenom = « Durand » ;
// Ouverture, écriture et fermeture du fichier. if (myFile.Open(pszFileName, CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive|CFile::typeBinary)) { // Création de l'objet archive. CArchive arch(&myFile, CArchive::store); arch<<Buf.strNom<<Buf.strPrenom; arch.Close();
myFile.close() ; }
"Patrick Mézard" a écrit dans le message de news:bhobgs$8ua$
Bonjour, je rencontre actuellement un pb qui me dépasse (visiblement il n'en
faut pas beaucoup.), je voudrais créer un fichier pour y enregistrer le contenu d'une variable de type structure du genre : Struct Pref { Cstring strNom ; Cstring strPrenom ; } ;
[Snip]
J'oubliais, lors de l'exécution du code, un fichier est bien créé, il contient quelque chose, par contre c'est au moment de la lecture que se produit le plantage, mais cela peut aussi être du à des données improprement
écrites dans le fichier.
1- Ta question est plutôt en rapport avec les MFC, donc pour plus d'infos poste là :
2- CString encapsule des chaines de caractères de longueur variable. C'est une classe à part entière et non pas une structure "plate" à la C (POD). Tu
ne peux donc pas la dupliquer à coup de memcpy et par extension avec les Read et Write de CFile. Il faut que tu enregistres et lises le _contenu_ de
tes CString, dont tu peux obtenir un pointeur par CString::GetBuffer() et la
longueur par GetLength(). De plus, tes chaines sont de longueurs variables et il te faut stocker cette information quelque part, soit dans un header précedent les chaines, soit dans le codage même de ton fichier. Bref c'est un peu plus compliqué que ça.
Patrick Mézard
Effectivement, le pb semble provenir des objets CString et en modifiant le
code de façon à utiliser la classe Carchive, l'enregistrement et la lecture
se passent correctement et ne génèrent aucune erreur. Cependant, les données
sont écrites en mode texte et de façon « séquentielle ». Or j'aurais
souhaité écrire directement une variable de type structure comme il est
possible de le faire en Pascal.
// Initialisation des champs de la variable.
Buf.strNom = « Dupont » ;
Buf.strPrenom = « Durand » ;
// Ouverture, écriture et fermeture du fichier.
if (myFile.Open(pszFileName,
CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive|CFile::typeBinary))
{
// Création de l'objet archive.
CArchive arch(&myFile, CArchive::store);
arch<<Buf.strNom<<Buf.strPrenom;
arch.Close();
myFile.close() ;
}
"Patrick Mézard" <patrick.mezard@ifrance.com> a écrit dans le message de
news:bhobgs$8ua$1@news-reader4.wanadoo.fr...
Bonjour, je rencontre actuellement un pb qui me dépasse (visiblement il
n'en
faut pas beaucoup.), je voudrais créer un fichier pour y enregistrer le
contenu d'une variable de type structure du genre :
Struct Pref
{
Cstring strNom ;
Cstring strPrenom ;
} ;
[Snip]
J'oubliais, lors de l'exécution du code, un fichier est bien créé, il
contient quelque chose, par contre c'est au moment de la lecture que se
produit le plantage, mais cela peut aussi être du à des données
improprement
écrites dans le fichier.
1- Ta question est plutôt en rapport avec les MFC, donc pour plus d'infos
poste là :
2- CString encapsule des chaines de caractères de longueur variable. C'est
une classe à part entière et non pas une structure "plate" à la C (POD).
Tu
ne peux donc pas la dupliquer à coup de memcpy et par extension avec les
Read et Write de CFile. Il faut que tu enregistres et lises le _contenu_
de
tes CString, dont tu peux obtenir un pointeur par CString::GetBuffer() et
la
longueur par GetLength(). De plus, tes chaines sont de longueurs variables
et il te faut stocker cette information quelque part, soit dans un header
précedent les chaines, soit dans le codage même de ton fichier. Bref c'est
un peu plus compliqué que ça.
Effectivement, le pb semble provenir des objets CString et en modifiant le code de façon à utiliser la classe Carchive, l'enregistrement et la lecture se passent correctement et ne génèrent aucune erreur. Cependant, les données sont écrites en mode texte et de façon « séquentielle ». Or j'aurais souhaité écrire directement une variable de type structure comme il est possible de le faire en Pascal.
// Initialisation des champs de la variable. Buf.strNom = « Dupont » ; Buf.strPrenom = « Durand » ;
// Ouverture, écriture et fermeture du fichier. if (myFile.Open(pszFileName, CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive|CFile::typeBinary)) { // Création de l'objet archive. CArchive arch(&myFile, CArchive::store); arch<<Buf.strNom<<Buf.strPrenom; arch.Close();
myFile.close() ; }
"Patrick Mézard" a écrit dans le message de news:bhobgs$8ua$
Bonjour, je rencontre actuellement un pb qui me dépasse (visiblement il n'en
faut pas beaucoup.), je voudrais créer un fichier pour y enregistrer le contenu d'une variable de type structure du genre : Struct Pref { Cstring strNom ; Cstring strPrenom ; } ;
[Snip]
J'oubliais, lors de l'exécution du code, un fichier est bien créé, il contient quelque chose, par contre c'est au moment de la lecture que se produit le plantage, mais cela peut aussi être du à des données improprement
écrites dans le fichier.
1- Ta question est plutôt en rapport avec les MFC, donc pour plus d'infos poste là :
2- CString encapsule des chaines de caractères de longueur variable. C'est une classe à part entière et non pas une structure "plate" à la C (POD). Tu
ne peux donc pas la dupliquer à coup de memcpy et par extension avec les Read et Write de CFile. Il faut que tu enregistres et lises le _contenu_ de
tes CString, dont tu peux obtenir un pointeur par CString::GetBuffer() et la
longueur par GetLength(). De plus, tes chaines sont de longueurs variables et il te faut stocker cette information quelque part, soit dans un header précedent les chaines, soit dans le codage même de ton fichier. Bref c'est un peu plus compliqué que ça.