我有很多数据以bin格式存储为一系列结构。我希望能够随机读取任何结构并在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;
}
答案 0 :(得分:3)
fopen没有“rw”标志。你需要“r +”进行读写(更新)。因为它是二进制数据,所以你应该在f_rite函数中使用“r + b”和“wb”,在f_read函数中使用“rb”。 也:
答案 1 :(得分:2)
"rw"
错了。使用"r+"
。阅读后别忘了回头。