如何在阅读时移入二进制文件?

How can I shift In a binary file while reading?

我将能够逐字节读取我所有的结构字节(字节块很大 "sizeof(Today)" 所以它有 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() 函数更有可能是错误的,但我尝试了所有可能的组合,但输出永远不是正确的! 谢谢大家

您可能想先为所有块分配 space,例如

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);
}

然后你得到了数组中的结构

例如printf( "month: %d", d[5].month);

然后对数组中的每个元素执行您需要执行的操作,然后再将其写回。取决于你的文件有多大

你的代码没有任何内容,我猜你的文件格式不是你想的那样。

我也想知道为什么你必须为结构分配内存。

此处的代码与您提供的代码类似。它只是演示以您描述的格式写入数据,然后在没有任何丢失的情况下检索它。

#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;
}