Enregistrer variables [api win32]

Résolu
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 - 24 août 2006 à 16:25
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 - 25 août 2006 à 18:09
Bonjour,

J'ai cherché de la documentation pour savoir comment enregistrer dans un fichier sous Windows. J'ai trouvé la fonction :

WriteFile(...)  mais elle ne peut enregistrer que des chaines de
carractères. Comment faire pour enregistrer d'autres types de varibles
tel que int, double, bool...

merci.

--------------------
Quand la merde vaudra de l'or les pauvres naitrons sans trou cu cul. Coluche.

11 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 août 2006 à 16:33
WriteFile demande un LPVOID. L'adresse d'un entier fait bien l'affaire

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
24 août 2006 à 16:37
Salut,
WriteFile() enregistre une suite d'octets. Tu peux donc créer un buffer, le remplir par tes données formatées selon tes besoins puis enregistrer le tout dans un fichier. Pour lire ces données le programme doit donc faire l'opération inverse. Il doit connaitre l'organisation de ces données dans le fichier avant de les traiter.
3
Utilisateur anonyme
24 août 2006 à 17:58
DWORD cbWritten;




WriteFile(hFile,&buf,5,&cbWritten,0);



L'avant dernié argument doit pas etre NULL tu dois donné ladresse d'un DWORD qui contiendra le nombre d'octet qui on pu etre écrit dans le fichier par WriteFile()





MaLaDeDeDe 97one 
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 août 2006 à 18:03
Une classe ou une structure va écrire tous ses membres à la suite:
Evidemment, il ne faut pas de pointeurs dans les données, sinon c'est l'adresse qui est écrite sur 4 octets et c'est tout.

struct
{
  double a;
  int b
} s;

Pour sauvegarder s, tu fais ceci:
WriteFile(hfile, &s, sizeof s, &d, 0);

Et pour relire:
ReadFile(hfile, &s, sizeof s, &d, 0);

Il ne faut pas copier les octets d'une variable dans un buffer, mais écrire directement ces valeurs comme ci dessus
_____________________________________
Un éditeur de ressources gratuit pour Windows
3

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

Posez votre question
Utilisateur anonyme
24 août 2006 à 16:51
Tu peux mettre dans un char sprintf(buff, "%d", Mon_int);
MaLaDeDeDe 97one 
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 août 2006 à 17:16
En écrivant l'entier directement, il prendra moins de place, et la lecture et l'écriture seront plus rapides

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 10
24 août 2006 à 17:52
Merci pour tous ces conseil par contre je préfère ne pas convertir en
char aussi pour ne pas que le fichier soit lisible (et donc
transformable) avec un simple bloc-note. Merci aussi pour l'astuce du
buffer.

Par contre mon code marchais tout à l'heure mais plus maintenant et je ne sais pas pourquoi....

Voici le code :

            HANDLE hFile;

            char buf[5]="test";


           
hFile=CreateFile("C:\\test.tes",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,0,0);

            WriteFile(hFile,&buf,5,0,0);


            CloseHandle(hFile);

Je suppose que l'un des arguments (voir même plusieurs) sont faux mais je ne vois pas lesquels.

Merci de votre aide.

--------------------
Quand la merde vaudra de l'or les pauvres naitrons sans trou cu cul. Coluche.
0
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 10
24 août 2006 à 17:58
Après vérification le fichier était créé correctement mais ça plantait après.

Merci ça marche.

--------------------
Quand la merde vaudra de l'or les pauvres naitrons sans trou cu cul. Coluche.
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
25 août 2006 à 11:47
0
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 10
25 août 2006 à 17:15
Pour enregistrer tout les membres d'une classe existe-il des méthodes
particulières ou faut-il fait cela membre par membre? (avec les MFC je
sais qu'il existe la sérialisation mais la...).

Et sinon pour la technique à racpp comment peut on copier les octés de
chaque variable dans un buffer? et savoir combien d'octés va prendre
chaque variable?


ouch ça fait beaucoup de questions... merci pour votre aide.

--------------------
Quand la merde vaudra de l'or les pauvres naitrons sans trou cu cul. Coluche.
0
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 10
25 août 2006 à 18:09
Ok merci pour tout maintenant ça s'éclaire.

--------------------
Quand la merde vaudra de l'or les pauvres naitrons sans trou cu cul. Coluche.
0
Rejoignez-nous