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
10
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
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
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
10
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
10
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