Donner une adresse à Fwrite
Hi !
J'ai un petit souci avec fwrite.
Imaginons une structure composé de plusieus champs int et qqes autres float. Cette structure est sauvegardée dans un fichier.
Je dois à certains moments mettre certains champs de ma structure à jour (1 à la fois dans mon cas).
Comment faire pour dire à fwrite de ne copier que le nième champ de ma structure et pas toute celle-ci ?
Un exemple:
-> Dans le cours du programme, le champ milieu a été mis à jour et je dois sauver cette mise à jour dans le fichier, sans changer les autres champs. Autrement dit, comment lui donner l'adresse de ce champ ?
Code:
1 2 3 4
| struct xyz
{ int debut, avant, milieu, apres, fin;
float a,b,c;
}; |
Merci ! :wink:
Re: Donner une adresse à Fwrite
Citation:
Envoyé par Mike888
Hi !
J'ai un petit souci avec fwrite.
Imaginons une structure composé de plusieus champs
int et qqes autres
float. Cette structure est sauvegardée dans un fichier.
Je dois à certains moments mettre certains champs de ma structure à jour (1 à la fois dans mon cas).
Comment faire pour dire à fwrite de ne copier que le nième champ de ma structure et pas toute celle-ci ?
Un exemple:
-> Dans le cours du programme, le champ milieu a été mis à jour et je dois sauver cette mise à jour dans le fichier, sans changer les autres champs. Autrement dit, comment lui donner l'adresse de ce champ ?
Code:
1 2 3 4
| struct
{ int debut, avant, milieu, apres, fin;
float a,b,c;
}; |
Merci ! :wink:
Ou la pas belle structure, deja elle a pas de nom??
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
struct
{
int debut;
int avant;
int milieu;
int apres;
int fin;
float a;
float b;
float c;
}MaStruct; |
Imaginons
Pour fwrite
Code:
1 2
|
fwrite(&a.fin, sizeof a.fin, 1, fichier); |
Re: Donner une adresse à Fwrite
Citation:
Envoyé par Mike888
J'ai un petit souci avec fwrite.
Imaginons une structure composé de plusieus champs int et qqes autres float. Cette structure est sauvegardée dans un fichier.
Je dois à certains moments mettre certains champs de ma structure à jour (1 à la fois dans mon cas).
Comment faire pour dire à fwrite de ne copier que le nième champ de ma structure et pas toute celle-ci ?
Il y a des bricolages possibles avec des modes d'ouverture tordus (pas toujours supportés par les OS, fseek() etc.
La solution 'canonique' est de recopier le fichier enregistrement par enregistrement (taille fixe, format binaire, on est d'accord ?), de modifier 'à la volée' celui qui nous interesse, et de le recopier ainsi modifié.
C'est plus lent sur les gros fichiers, mais ça préserve le fichier original (on peut annuler la modif) et ça évite les risques de destruction (Ecriture / Lecture sur un fichier précieux de 200Mo, ça fout la trouille).
Dans l'industrie, on utilise des bases de données qui gèrent tout ça en transparence totale pour l'utiisateur (MySQL, SQLLite, PostgreSQL etc.)