J'ai beaucoup de données stockées au format bin comme une séquence de structures. Je veux être capable de lire aléatoirement l'une des structures et de le modifier en C. J'essaie avec le code suivant mais cela ne fonctionne pas. Quelqu'un peut-il le réparer pour moi s'il vous plaît?Modification des données du fichier .bin dans C
De même, serait-il possible de supprimer une structure intermédiaire du fichier entre?
Le code est ci-dessous:
#include <stdio.h>
#include <stdlib.h>
struct rec {
int x,y,z;
};
void f_rite()
{
int i;
FILE *ptr_myfile;
struct rec my_record;
ptr_myfile=fopen("test.bin","w");
for (i=0; i < 5; i++) {
my_record.x = i;
fwrite(&my_record, sizeof(struct rec), 1, ptr_myfile);
}
fclose(ptr_myfile);
return;
}
void f_read()
{
int i;
FILE *ptr_myfile;
struct rec my_record;
ptr_myfile=fopen("test.bin","r");
for (i=1; i <= 5; i++) {
fread(&my_record,sizeof(struct rec),1,ptr_myfile);
printf("%d\n",my_record.x);
}
printf("\n");
fclose(ptr_myfile);
return;
}
void f_rerite()
{
int i;
FILE *ptr_myfile;
struct rec my_record;
ptr_myfile=fopen("test.bin","rw");
for (i=5; i >= 0; i--) {
fseek(ptr_myfile, sizeof(struct rec)*i, SEEK_SET);
fread(&my_record, sizeof(struct rec), 1, ptr_myfile);
my_record.x = my_record.x + 100;
fwrite(&my_record, sizeof(struct rec), 1, ptr_myfile);
}
fclose(ptr_myfile);
return;
}
int main()
{
f_rite();
f_read();
f_rerite();
f_read();
return 0;
}
Vous devez faire 'fseek()' ou une opération équivalente chaque fois que vous passez de la lecture à l'écriture (ou de l'écriture à la lecture). Vous devez donc avoir deux opérations 'fseek()' par boucle. –