У меня есть много данных, хранящихся в формате бина как последовательность структур. Я хочу иметь возможность произвольно читать любую из структур и изменять ее в C. Я пытаюсь использовать следующий код, но он не работает. Может кто-нибудь исправить это для меня, пожалуйста?
Кроме того, возможно ли удалить промежуточную структуру из промежуточного файла?
Код ниже:
#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;
}