我能够按字节读取所有结构字节(字节块大“sizeof(今天)”所以它大8字节)。我尝试的次数越来越多,但我不能!请帮帮我!
Bin文件:“temp.bin”
我的结构:
typedef struct
{
int year;
int month;
} Today;
这是代码的一部分,应该在每个周期读取8个字节:
Today *d;
d = malloc(sizeof(Today));
fp = fopen("temp.bin", "rb");
while(!feof(fp))
{
fread(d, sizeof(Today), 1, fp);
printf("Year = %i\n", d->year);
printf("Month = %i\n", d->month);
}
fclose(fp);
while条件和fread()函数更可能是错误的,但我尝试了所有可能的组合,但输出永远不是正确的! 谢谢大家
答案 0 :(得分:0)
您可能希望首先为所有块分配空间,例如
fp = fopen( "temp.bin", "rb" );
if ( fp != NULL )
{
fseek( fp, 0L, SEEK_END );
size_t size = ftell(fp);
rewind(fp);
Today *d;
d = malloc(size);
fread( d, sizeof(Today), size/sizeof(Today), fp );
fclose(fp);
}
然后你得到了数组中的结构
e.g。 printf( "month: %d", d[5].month);
然后在数组中的每个元素上执行您需要执行的操作,然后再将其写回。取决于您的文件有多大
答案 1 :(得分:0)
您的代码没有任何内容,我猜您的文件格式并不像您想象的那样。
我也徘徊为什么你必须为struct分配内存。
此处的代码与您提供的代码类似。它只是演示以您描述的格式写入数据,然后检索它而不会丢失。
#include <stdio.h>
#include <string.h>
typedef struct
{
int year;
int month;
} Today;
#define DataFile "temp.bin"
int main(){
Today d;
printf("sizeof(Today)=%d\n",sizeof(Today));
FILE *fp = fopen(DataFile, "wb");
for(int i=1;i<13;i++){
d.month=i;
d.year=2000+i;
fwrite(&d, sizeof(Today), 1, fp);
}
fclose(fp);
printf("write complete, press a key to read\n");
_getch();
fp = fopen(DataFile, "rb");
while(fread(&d, sizeof(Today), 1, fp)){
printf("Year = %i\t", d.year);
printf("Month = %i\n", d.month);
}
fclose(fp);
return 0;
}