Enregistrer variables [api win32] [Résolu]

Signaler
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
-
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
WriteFile demande un LPVOID. L'adresse d'un entier fait bien l'affaire

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.

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 
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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

Tu peux mettre dans un char sprintf(buff, "%d", Mon_int);
MaLaDeDeDe 97one 
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
6
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.
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
6
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.
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
6
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.
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
6
Ok merci pour tout maintenant ça s'éclaire.

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